You need to enable JavaScript to run this app. Django使用DRF集成reCAPTCHA时POST请求传到视图为空如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Django使用DRF集成reCAPTCHA时POST请求传到视图为空如何解决

解决方案

你遇到的POST数据为空问题,按以下步骤逐一排查:

  • 检查路由配置是否存在重定向丢数据的问题
    Django默认开启APPEND_SLASH配置,当请求地址和路由配置的斜杠不匹配时,会返回301重定向,重定向过程中POST请求会自动转为GET请求,所有请求数据都会丢失。确认你urls.py中对应接口的路由末尾是否带斜杠,必须和form表单的action="/api/test_recaptcha/"配置完全一致,建议统一在路由末尾添加斜杠:
    # 正确示例
    path('api/test_recaptcha/', TESTViewSet.as_view(), name='test_recaptcha'),
    
  • 检查DRF解析器配置
    DRF需要对应解析器才能把请求体的数据解析到request.data中,普通form表单提交的Content-Type为application/x-www-form-urlencoded,需要确保FormParser在解析器列表中。可以在settings.py中全局配置:
    REST_FRAMEWORK = {
        'DEFAULT_PARSER_CLASSES': [
            'rest_framework.parsers.JSONParser',
            'rest_framework.parsers.FormParser',
            'rest_framework.parsers.MultiPartParser'
        ]
    }
    
    如果你的视图单独配置了parser_classes参数,也需要检查是否包含上述两种表单解析器。
  • 排查请求原始数据
    可以临时修改视图代码打印原始请求体,确认数据是否已经到达后端:
    def post(self, request):
        # 打印原始请求体,确认数据是否传递成功
        st = f'test: {request.body} - {request.POST} - {request.data} '
        return HttpResponse(st)
    
    如果request.body有数据但request.POST和request.data为空,确认没有自定义中间件修改或者丢弃了请求数据。
  • 确认reCAPTCHA字段提交正常
    谷歌reCAPTCHA提交成功后会自动生成g-recaptcha-response字段,你可以在浏览器的开发者工具网络面板中查看POST请求的表单数据,确认该字段是否正常携带。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 15:45:07