杰瑞科技汇

如何用Python开发webserver接口?

Python 在这个领域有非常成熟和强大的框架,最主流和推荐的是 FlaskDjango

如何用Python开发webserver接口?-图1
(图片来源网络,侵删)
  • Flask: 轻量级、灵活,被称为“微框架”,适合快速开发小型应用、API 服务,或者作为大型项目的某个模块,学习曲线平缓。
  • Django: 功能全面、重量级的“全能框架”,它自带了 ORM(数据库交互)、后台管理、用户认证等大量功能,适合开发大型、复杂的网站项目。

对于“接口”这个需求,Flask 是最直接、最合适的选择,下面的讲解将主要围绕 Flask 展开,最后会简要介绍 Django。


使用 Flask(最推荐,适合初学者和 API 开发)

Flask 的核心思想是让你用最少的代码创建一个 Web 应用。

安装 Flask

你需要安装 Flask,打开你的终端或命令行工具,运行:

pip install Flask

创建一个最简单的 Web 服务器(Hello World)

让我们从一个最基础的例子开始,它只是返回一个 "Hello, World!" 字符串。

如何用Python开发webserver接口?-图2
(图片来源网络,侵删)

创建一个名为 app.py 的文件:

# 1. 导入 Flask 类
from flask import Flask
# 2. 创建一个 Flask 应用实例
# __name__ 是一个 Python 预定义变量,它表示当前模块的名称。
# Flask 用它来定位资源文件(如模板、静态文件)。
app = Flask(__name__)
# 3. 使用装饰器 @app.route() 来定义 URL 路由
# '/' 是根路径,也就是网站的首页。
# 当用户访问网站的根 URL 时,下面的 hello_world 函数就会被调用。
@app.route('/')
def hello_world():
    return 'Hello, World!'
# 4. 运行这个 Web 服务器
# if __name__ == '__main__': 确保这个脚本只有在直接运行时才会启动服务器,
# 而不是在被其他脚本导入时启动。
# debug=True 开启调试模式,这样代码修改后服务器会自动重启,并且出错时会显示详细的错误信息。
if __name__ == '__main__':
    app.run(debug=True)

运行服务器:

在终端中,进入到 app.py 所在的目录,然后运行:

python app.py

你会看到类似这样的输出:

 * Serving Flask app 'app'
 * Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit
 * Restarting with stat
 * Debugger is active!
 * Debugger PIN: ...

打开你的浏览器,访问 http://127.0.0.1:5000,你就能看到页面上的 "Hello, World!" 了。

创建一个返回 JSON 数据的 API 接口

API 通常返回 JSON 格式的数据,因为这种格式易于被各种客户端(如手机 App、前端 JavaScript)解析。

让我们修改 app.py,添加一个新的接口 /api/info,它返回一个 JSON 对象。

from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def hello_world():
    return 'Hello, World!'
# 新增一个 API 接口
@app.route('/api/info')
def get_info():
    # jsonify 函数会将 Python 字典转换为 JSON 格式的响应
    # 并且自动设置正确的 Content-Type 头为 application/json
    data = {
        'name': 'My First API',
        'version': '1.0',
        'author': 'Python Developer'
    }
    return jsonify(data)
if __name__ == '__main__':
    app.run(debug=True)

测试新接口:

  1. 重新运行 python app.py
  2. 在浏览器中访问 http://127.0.0.1:5000/api/info
  3. 你会看到浏览器显示:
    {
      "author": "Python Developer",
      "name": "My First API",
      "version": "1.0"
    }
  4. 更专业的测试方式:使用 curl 命令(在终端中运行)或 Postman 等工具。
    curl http://127.0.0.1:5000/api/info

处理动态 URL 和 HTTP 方法

API 经常需要根据 URL 中的参数来返回不同的数据,并且支持不同的 HTTP 方法(如 GET, POST, PUT, DELETE)。

from flask import Flask, jsonify, request
app = Flask(__name__)
# 模拟一个简单的数据库
users = {
    1: {'name': 'Alice', 'email': 'alice@example.com'},
    2: {'name': 'Bob', 'email': 'bob@example.com'}
}
# GET /api/users/<user_id> - 获取单个用户信息
# <user_id> 是一个动态部分,它会作为参数传入函数
@app.route('/api/users/<int:user_id>', methods=['GET'])
def get_user(user_id):
    user = users.get(user_id)
    if user:
        return jsonify(user)
    # 如果用户不存在,返回 404 Not Found 错误
    return jsonify({'error': 'User not found'}), 404
# POST /api/users - 创建一个新用户
@app.route('/api/users', methods=['POST'])
def create_user():
    # 从请求的 JSON body 中获取数据
    # request.get_json() 会解析请求体中的 JSON 数据
    if not request.is_json:
        return jsonify({'error': 'Request must be JSON'}), 400
    data = request.get_json()
    new_id = max(users.keys()) + 1
    users[new_id] = {
        'name': data.get('name'),
        'email': data.get('email')
    }
    # 返回新创建的用户信息,并设置 HTTP 状态码为 201 (Created)
    return jsonify(users[new_id]), 201
if __name__ == '__main__':
    app.run(debug=True)

测试动态接口:

  1. 获取用户 1:

    curl http://127.0.0.1:5000/api/users/1
    # 输出: {"email":"alice@example.com","name":"Alice"}
  2. 获取不存在的用户:

    curl http://127.0.0.1:5000/api/users/99
    # 输出: {"error":"User not found"}
  3. 创建新用户:

    curl -X POST \
         -H "Content-Type: application/json" \
         -d '{"name": "Charlie", "email": "charlie@example.com"}' \
         http://127.0.0.1:5000/api/users
    # 输出: {"email":"charlie@example.com","name":"Charlie"}
    • -X POST: 指定 HTTP 方法为 POST。
    • -H "Content-Type: application/json": 设置请求头,告诉服务器我们发送的是 JSON 数据。
    • -d '...': 指定请求体的内容。

使用 Django(适合大型项目)

如果你计划构建一个功能非常全面的网站,并且不希望自己处理太多底层细节,Django 是一个很好的选择。

安装 Django

pip install Django

创建项目和 App

Django 使用“项目”和“应用”的概念来组织代码。

# 创建一个名为 myproject 的项目
django-admin startproject myproject
# 进入项目目录
cd myproject
# 创建一个名为 api 的应用,专门用来放我们的接口
python manage.py startapp api

配置 URL 和视图

  1. 配置项目总 URL (myproject/urls.py):

    from django.contrib import admin
    from django.urls import path, include
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('api/', include('api.urls')),  # 将所有 /api/ 开头的请求转发到 api 应用的 urls.py
    ]
  2. 创建应用 URL (api/urls.py): 这个文件需要你手动创建。

    from django.urls import path
    from . import views  # 导入当前应用的视图函数
    urlpatterns = [
        # 当访问 /api/users/ 时,调用 views.user_list 函数
        path('users/', views.user_list, name='user_list'),
    ]
  3. 编写视图函数 (api/views.py):

    from django.http import JsonResponse
    def user_list(request):
        # Django 的视图函数默认接收一个 request 对象
        # 我们可以检查 request.method 来区分 GET 和 POST
        if request.method == 'GET':
            # 模拟数据
            data = [
                {'id': 1, 'name': 'Alice'},
                {'id': 2, 'name': 'Bob'},
            ]
            # JsonResponse 会自动将 Python 列表/字典转换为 JSON 响应
            return JsonResponse(data, safe=False) # safe=False 允许列表作为根元素
        elif request.method == 'POST':
            # 在实际项目中,这里会解析 request.body 获取 JSON 数据
            # 并进行数据库操作
            return JsonResponse({'message': 'User created successfully'}, status=201)
        # 其他方法返回 405 Method Not Allowed
        return JsonResponse({'error': 'Method not allowed'}, status=405)

运行 Django 服务器

# 在 myproject 目录下运行
python manage.py runserver

你可以访问 http://127.0.0.1:8000/api/users/ 来测试你的 API。


总结与对比

特性 Flask Django
定位 微框架,灵活,轻量 全能框架,功能全面
核心优势 简单、易于上手、扩展性强 开箱即用、自带 ORM、Admin、安全特性
学习曲线 平缓 较陡峭
适合场景 - API 服务
- 小型网站
- 大型项目的某个模块
- 大型内容管理系统
- 电商网站
- 需要快速开发后台管理的项目
代码风格 自由度高,项目结构由开发者决定 强制约定,遵循“MTV”(Model-Template-View)模式

给你的建议:

  • 如果你的目标是学习如何创建 API,或者项目规模不大,强烈推荐从 Flask 开始,它能让你快速理解 Web 服务器和 API 的核心概念。
  • 如果你计划做一个功能完整的网站,并且希望 Django 帮你处理好数据库、后台管理等琐事,那么选择 Django 会更高效。
分享:
扫描分享到社交APP
上一篇
下一篇