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
相关产品推荐
相关产品推荐

