凌峰创科服务平台

Python如何快速搭建Web服务器?

使用 Python 内置的 http.server (最简单,适合快速测试)

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

Python如何快速搭建Web服务器?-图1
(图片来源网络,侵删)

特点:

  • 优点: 开箱即用,无需安装,代码极简。
  • 缺点: 功能非常有限,不适合生产环境,不支持动态内容(除非你自己处理)。

示例代码

假设你有一个目录 my_project,里面包含了你的 HTML、CSS、JS 文件,你想把这个目录变成一个可以通过浏览器访问的网站。

  1. 创建一个目录并放入一些文件:

    mkdir my_project
    cd my_project
    echo "<h1>Hello from Python Server!</h1>" > index.html
  2. my_project 目录下,创建一个 Python 文件,server.py,并写入以下代码:

    Python如何快速搭建Web服务器?-图2
    (图片来源网络,侵删)
    # 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()
  3. 运行服务器:

    python server.py
  4. 打开浏览器,访问 http://localhost:8000http://127.0.0.1:8000,你就能看到 index.html 的内容了。


使用第三方库 Flask (推荐,适合开发中小型应用)

Flask 是一个轻量级的 Web 应用框架,被称为“微框架”,它非常灵活,易于学习,并且拥有丰富的扩展生态,是 Python Web 开发入门和中小型项目开发的首选。

特点:

Python如何快速搭建Web服务器?-图3
(图片来源网络,侵删)
  • 优点: 简单易学,文档完善,社区活跃,灵活性强,适合快速开发。
  • 缺点: 相较于 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 配置是分层的。

  1. 编辑 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 处理
    ]
  2. 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,它能帮你处理大量繁琐的后台工作,让你专注于业务逻辑。
分享:
扫描分享到社交APP
上一篇
下一篇