You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python Django框架中接收并处理用户POST请求的实现方法

Django接收并处理POST请求的实现方法

1. 路由配置

首先在项目对应的urls.py中添加视图路由,把POST请求的访问路径和你编写的处理逻辑绑定:

# urls.py
from django.urls import path
from . import views

urlpatterns = [
    # 自定义路径和对应的视图
    path('api/receive-data/', views.handle_post_request, name='receive_post_data'),
]

2. 编写处理POST请求的视图逻辑

Django所有请求信息都会封装在request对象中,你可以通过判断请求方法、解析对应字段拿到POST提交的数据。

注意:默认Django开启CSRF校验,如果是前后端分离场景或者不需要CSRF校验,可以给视图加@csrf_exempt装饰器,生产环境使用该装饰器请务必搭配额外鉴权逻辑,避免安全漏洞。

函数视图示例

# views.py
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
import json

# 不需要CSRF校验就加这个装饰器,不需要可以删除
@csrf_exempt
def handle_post_request(request):
    # 仅处理POST请求
    if request.method != 'POST':
        return JsonResponse({'code': 405, 'msg': '仅支持POST请求'}, status=405)
    
    # 提取POST数据分两种场景:
    # 场景1:普通表单提交(content-type为x-www-form-urlencoded/multipart/form-data)
    form_username = request.POST.get('username', '') # 第二个参数为取不到值时的默认值,避免抛出KeyError
    form_age = request.POST.get('age', 0)
    # 如果要接收上传的文件,从request.FILES取,同时前端表单需要加enctype="multipart/form-data"属性
    # upload_file = request.FILES.get('file')

    # 场景2:JSON格式提交(content-type为application/json)
    try:
        json_data = json.loads(request.body)
        json_gender = json_data.get('gender', '')
        json_email = json_data.get('email', '')
    except json.JSONDecodeError:
        return JsonResponse({'code': 400, 'msg': 'JSON格式错误'}, status=400)

    # 这里写你自己的业务逻辑:比如数据存库、业务计算等
    # ......

    # 返回响应
    return JsonResponse({
        'code': 200,
        'msg': '请求处理成功',
        'data': {
            'received_form_username': form_username,
            'received_json_gender': json_gender
        }
    })

类视图示例

如果你使用Django类视图,可以参考以下写法:

from django.views import View
from django.utils.decorators import method_decorator

# 给类视图加CSRF豁免装饰器
@method_decorator(csrf_exempt, name='dispatch')
class PostDataView(View):
    # 直接实现post方法即可,不需要额外判断请求方法
    def post(self, request):
        # 数据提取和业务逻辑和上面函数视图写法一致
        username = request.POST.get('username')
        return JsonResponse({'code': 200, 'msg': '处理成功', 'username': username})

类视图对应的路由需要修改为:

path('api/receive-data/', views.PostDataView.as_view(), name='receive_post_data'),

3. 常见注意事项

  • 提取POST参数优先用get()方法,避免参数不存在时抛出KeyError异常
  • 拿到参数后建议先做合法性校验,比如长度、格式、非空判断等,避免非法数据进入业务逻辑
  • 生产环境如果不需要CSRF校验,一定要搭配签名校验、登录态校验等鉴权逻辑,防止恶意请求

内容的提问来源于stack exchange,提问作者Maxim Kuskov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 11:15:06