python http模块快速搭建“简单”服务器笔记 python -m http.sever

极简运行

python -m http.sever

# test.py
import http.server
import socketserver

PORT = 8000

Handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(("", PORT), Handler) as httpd:
    print("serving at port", PORT)
    httpd.serve_forever()

在这里插入图片描述
在这里插入图片描述

CGI-Bin

启动服务

import os
from http.server import HTTPServer, CGIHTTPRequestHandler
webdir="C:\\Users\\admin\\Desktop\\http"
os.chdir(webdir)
HTTPServer(("127.0.0.1", 8080), CGIHTTPRequestHandler).serve_forever()
import pickle
import os

student_keys = ("name", "gender", "age", "score")

if os.path.exists("student.data"):
    with open("student.data", "rb") as file:
        student = pickle.load(file)
    student = student or {}
else:
    student = {}

if not student:
    student = dict.fromkeys(student_keys, "")

header = "Content-Type: text/html\n"
content = """
<html>
  <body>
    <form action="/cgi-bin/update.py" method="POST">
        <table>
            <tr>
                <td>name: </td>
                <td><input name="name" value="{name}"/></td>
            </tr>
            <tr>
                <td>gender:</td>
                <td><input name="gender" value="{gender}"/></td>
            <tr>
            <tr>
                <td>age: </td>
                <td><input name="age" value="{age}"/></td>
            </tr>
            <tr>
                <td>score: </td>
                <td><input name="score" value="{score}"/></td>
            </tr>
            <tr>
                <td style="padding-top: 10px" align="center" colspan="2">
                    <button type="submit">Submit</button>
                </td>
            </tr>
        </table>
    </form>
  </body>
</html>
"""
import os
import cgi
import pickle

student_keys = ("name", "gender", "age", "score")
if os.path.exists("student.data"):
    with open("student.data", "rb") as file:
        student = pickle.load(file)
    student = student or {}
else:
    student = {} 

if not student:
    student = dict.fromkeys(student_keys, "")

form = cgi.FieldStorage()
for key in student_keys:
    if key in form and form[key].value:
        student[key] = form[key].value

with open("student.data", "wb") as file:
    pickle.dump(student, file)

header = "Content-Type: text/html\n"
content = """
<html>
<body>
<h1>update successfully, will skip to display page: <span id="count_down">3</span></h1>
<script>
   var count = 3 
   timer_id = setInterval(function(){
       count = count -1
       if(count == 0) {
           clearInterval(timer_id)
           location.href="/cgi-bin/student.py"
       } else {
           document.getElementById("count_down").innerHTML = "" + count
       }
   },1000)
</script>
</body>
</html>
"""

在这里插入图片描述
你可能应该访问“localhost:81/cgi-bin/index.py”。因为“localhost:81/cgi-bin/”是一个目录,不是一个python script。

使用体验

  • 当在文件服务器的模式下,可以直接访问并渲染html文件,但是当我使用以下代码时,浏览器提示var myChart = echarts.init(document.getElementById('main'));无法找到echarts对象。
import os
import cgi
import pickle

# student_keys = ("name", "gender", "age", "score")
# if os.path.exists("student.data"):
#     with open("student.data", "rb") as file:
#         student = pickle.load(file)
#     student = student or {}
# else:
#     student = {}
#
# if not student:
#     student = dict.fromkeys(student_keys, "")

form = cgi.FieldStorage()
# for key in student_keys:
#     if key in form and form[key].value:
#         student[key] = form[key].value

# with open("student.data", "wb") as file:
#     pickle.dump(student, file)

header = "Content-Type: text/html\n"
content = """
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>bar</title>
    <!-- 引入 echarts.js -->
    <script src="echarts.min.js"></script>
</head>
<body>
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div id="main" style="width: 900px;height:600px;"></div>

<script type="text/javascript">
// 基于准备好的dom,初始化echarts实例

var myChart = echarts.init(document.getElementById('main'));

// 指定图表的配置项和数据
var option = {
    // 标题
    title: {
        text: 'ECharts 入门示例'
    },
    // 工具箱
    toolbox: {
        show: true,
        feature: {
            saveAsImage: {
                show: true
            }
        }
    },
    // 图例
    legend: {
        data: ['销量']
    },
    // x轴
    xAxis: {
        data: ["衬衫", "羊毛衫", "雪纺衫", "裤子", "高跟鞋", "袜子"]
    },
    yAxis: {},
    // 数据
    series: [{
        name: '销量',
        type: 'bar',
        data: [5, 20, 36, 10, 10, 20]
    }]
};

// 使用刚指定的配置项和数据显示图表。
myChart.setOption(option);
</script>
</body>
</html>
"""
print(header + content)

参考与更多

https://docs.python.org/3/library/http.server.html
用 Python 的 SimpleHTTPServer 模組快速建立一個臨時網頁伺服器(Web Server)
使用Python的http.server实现一个简易的Web Api对外提供HanLP拼音转换服务
simple http server for upload and download

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值