使用 Python 内置的 http.server (最简单,适合快速测试)
这是 Python 标准库自带的模块,无需安装任何第三方库,非常适合用于快速搭建一个临时的、用于文件共享或简单测试的 Web 服务器。

特点:
- 优点: 开箱即用,无需安装,代码极简。
- 缺点: 功能非常有限,不适合生产环境,不支持动态内容(除非你自己处理)。
示例代码
假设你有一个目录 my_project,里面包含了你的 HTML、CSS、JS 文件,你想把这个目录变成一个可以通过浏览器访问的网站。
-
创建一个目录并放入一些文件:
mkdir my_project cd my_project echo "<h1>Hello from Python Server!</h1>" > index.html
-
在
my_project目录下,创建一个 Python 文件,server.py,并写入以下代码:
(图片来源网络,侵删)# server.py # 导入必要的模块 from http.server import HTTPServer, SimpleHTTPRequestHandler import socket # 定义要监听的地址和端口 host = '0.0.0.0' # 0.0.0.0 表示监听所有网络接口 port = 8000 # 端口号,可以自定义,但通常使用 1024 以上的端口 # 创建一个自定义的请求处理器,以获取本机IP地址 class MyHTTPRequestHandler(SimpleHTTPRequestHandler): def log_message(self, format, *args): # 获取本机IP地址 hostname = socket.gethostname() ip = socket.gethostbyname(hostname) print(f"[{self.address_string()}] {format % args} (Access via: http://{ip}:{port})") # 创建服务器实例 server = HTTPServer((host, port), MyHTTPRequestHandler) # 打印启动信息 print(f"Server started at http://{host}:{port}") print(f"You can also access it via your local network at http://<your_local_ip>:{port}") # 运行服务器,它会一直阻塞,直到收到停止信号 (如 Ctrl+C) try: server.serve_forever() except KeyboardInterrupt: print("\nServer stopped.") server.server_close() -
运行服务器:
python server.py
-
打开浏览器,访问
http://localhost:8000或http://127.0.0.1:8000,你就能看到index.html的内容了。
使用第三方库 Flask (推荐,适合开发中小型应用)
Flask 是一个轻量级的 Web 应用框架,被称为“微框架”,它非常灵活,易于学习,并且拥有丰富的扩展生态,是 Python Web 开发入门和中小型项目开发的首选。
特点:

- 优点: 简单易学,文档完善,社区活跃,灵活性强,适合快速开发。
- 缺点: 相较于 Django,功能较少,很多功能需要自己寻找扩展或自己实现。
安装 Flask
pip install Flask
示例代码
创建一个名为 app.py 的文件:
# app.py
# 从 flask 模块导入必要的组件
from flask import Flask, render_template, request, jsonify
# 创建一个 Flask 应用实例
# __name__ 是一个 Python 预定义变量,它表示当前模块的名称
app = Flask(__name__)
# 定义一个路由,当用户访问根路径 "/" 时,执行这个函数
@app.route('/')
def hello_world():
# 返回一个简单的字符串
return '<h1>Hello, Flask World!</h1><p>This is a simple Flask server.</p>'
# 定义一个带参数的路由
@app.route('/user/<username>')
def show_user_profile(username):
# Flask 会自动将 URL 中的 <username> 部分作为参数传入函数
return f'<h1>User: {username}</h1>'
# 定义一个处理 POST 请求的路由
@app.route('/api/data', methods=['GET', 'POST'])
def handle_data():
if request.method == 'POST':
# 获取 POST 请求的 JSON 数据
data = request.get_json()
if data:
print(f"Received data: {data}")
# 返回一个 JSON 响应
return jsonify({"status": "success", "received": data}), 200
else:
return jsonify({"status": "error", "message": "No data received"}), 400
else:
# GET 请求
return jsonify({"message": "This is a GET request to /api/data"})
# 定义一个渲染 HTML 模板的路由
# 首先需要创建一个 templates 文件夹,并在里面放一个 index.html 文件
@app.route('/home')
def home():
return render_template('index.html')
# 这是 Flask 应用的入口点
if __name__ == '__main__':
# debug=True 会在代码修改后自动重启服务器,并方便调试
app.run(host='0.0.0.0', port=5000, debug=True)
创建 HTML 模板
在 app.py 同级目录下,创建一个名为 templates 的文件夹,然后在里面创建 index.html:
<!-- templates/index.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">Flask Template</title>
</head>
<body>
<h1>Welcome to the Flask App!</h1>
<p>This page is rendered from a template file.</p>
</body>
</html>
运行服务器
flask run # 或者直接运行 python 文件 python app.py
访问 http://localhost:5000 即可看到效果。
使用第三方库 Django (功能强大,适合构建大型复杂应用)
Django 是一个“重量级”的全功能 Web 框架,它遵循“电池已包含”(Batteries-Included)的理念,自带了后台管理、ORM(对象关系映射)、用户认证、表单处理等大量功能,让你可以专注于业务逻辑。
特点:
- 优点: 功能全面,开发效率高,自带强大的后台管理,安全性好,适合构建大型、数据驱动的网站。
- 缺点: 学习曲线较陡,框架本身比较“重”,灵活性不如 Flask。
安装 Django
pip install django
创建项目和项目结构
Django 使用命令行工具来创建项目结构。
# 创建一个名为 myproject 的 Django 项目 django-admin startproject myproject # 进入项目目录 cd myproject # 创建一个名为 myapp 的应用 (一个项目可以包含多个应用) python manage.py startapp myapp
现在你的目录结构应该像这样:
myproject/
├── manage.py
├── myproject/
│ ├── __init__.py
│ ├── asgi.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── myapp/
├── __init__.py
├── admin.py
├── apps.py
├── migrations/
├── models.py
├── tests.py
└── views.py
编写视图
编辑 myapp/views.py 文件,添加视图函数:
# myapp/views.py
from django.http import HttpResponse
def home(request):
return HttpResponse("<h1>Hello, Django World!</h1><p>This is a simple Django view.</p>")
def greet(request, name):
return HttpResponse(f"<h1>Hello, {name}!</h1>")
配置 URL
你需要将视图函数映射到 URL,Django 的 URL 配置是分层的。
-
编辑
myproject/urls.py,将myapp的 URL 包含进来:# myproject/urls.py from django.contrib import admin from django.urls import path, include # 导入 include urlpatterns = [ path('admin/', admin.site.urls), path('', include('myapp.urls')), # 所有指向根路径的请求,都交给 myapp.urls 处理 ] -
在
myapp目录下创建一个urls.py文件(如果不存在):# myapp/urls.py from django.urls import path from . import views # 导入当前目录下的 views.py urlpatterns = [ # 空路径映射到 home 视图 path('', views.home, name='home'), # greet/... 路径映射到 greet 视图 path('greet/<str:name>/', views.greet, name='greet'), ]
运行服务器
python manage.py runserver
你可以访问:
http://127.0.0.1:8000/-> 显示 "Hello, Django World!"http://127.0.0.1:8000/greet/Django/-> 显示 "Hello, Django!"
总结与选择建议
| 特性/方法 | Python http.server |
Flask |
Django |
|---|---|---|---|
| 复杂度 | 极低 | 低 | 高 |
| 适用场景 | 临时文件共享、学习网络编程、快速原型测试 | 中小型网站、API 服务、Web 应用 | 大型复杂网站、内容管理系统、企业级应用 |
| 性能 | 低 | 中等 | 高 |
| 灵活性 | 极高(但需自己实现所有功能) | 高 | 低(框架规范性强) |
| 功能 | 无(静态文件) | 需通过扩展实现 | 内置丰富(ORM, Admin, Auth 等) |
| 学习曲线 | 最平缓 | 缓和 | 陡峭 |
如何选择?
- 如果你只是想快速分享一些文件,或者做一个临时的测试服务器:使用
http.server。 - 如果你是 Python Web 开发初学者,或者要开发一个中小型项目、一个 API:强烈推荐
Flask,它足够简单,能让你快速上手,同时又有足够的扩展性。 - 如果你要构建一个功能非常复杂、数据驱动的大型网站,并且希望有一个“开箱即用”的解决方案:选择
Django,它能帮你处理大量繁琐的后台工作,让你专注于业务逻辑。
