为什么该场景下Django的POST请求方法无法正常使用报500错误?
问题解决方案
Django下POST请求报500可按以下步骤排查修复:
- 确认CSRF配置正确
首先检查项目settings.py的MIDDLEWARE列表中存在django.middleware.csrf.CsrfViewMiddleware(默认是开启状态,若手动注释过需要恢复)。其次你的HTML模板必须由Django渲染,不能是直接访问的静态HTML文件,否则模板中的{% csrf_token %}不会被解析为有效的token值,会导致CSRF校验失败。 - 修正视图代码
你当前的视图没有做请求方法判断,也没有做参数存在性校验,当用GET方式访问该视图时,request.POST['data']会直接抛出KeyError触发500错误,修改后的视图代码如下:
from django.http import HttpResponse from django.views.decorators.http import require_http_methods # 限制视图仅接受POST请求 @require_http_methods(["POST"]) def a(request): # 用get方法获取参数,避免参数不存在时抛出异常 x = request.POST.get('data', '') # 修正之前标签不匹配的问题:开头h1结尾h2的错误 html = '<h1> {} </h1>'.format(x) return HttpResponse(html)
- 确认路径匹配一致
检查项目urls.py中/input路径和视图的绑定关系,要和表单action属性的路径完全匹配,示例配置如下:
from django.urls import path from .views import a urlpatterns = [ # 要和form的action="/input"保持完全一致,若你配置为path('input/', ...),form的action也要改为"/input/" path('input', a, name='input'), ]
内容的提问来源于stack exchange,提问作者hanover
相关产品推荐
相关产品推荐

