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

如何从外部应用向Django发送POST请求并解决CSRF验证问题

解决方案

问题原因

Django默认启用了CSRF防护中间件,所有POST请求默认需要携带合法的CSRF Token才能通过验证,你的请求没有携带对应令牌所以被拦截。

方案1:接口仅服务于内部脚本,直接关闭CSRF验证(最简单)

给你的check视图加csrf_exempt装饰器跳过CSRF校验即可:

# 先导入装饰器
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse

# 加在视图函数上方
@csrf_exempt
def check(request):
    message = ''
    # 注意你原代码的判断条件写错了,你传的参数没有名为login/password的键,永远无法命中
    if 'login' in request.POST and 'pass' in request.POST:
        checkdata(request.POST)
    else:
        message = '404'
    return HttpResponse(message)

改完之后你的原有post.py代码就可以正常请求了。

方案2:正常获取CSRF Token发起请求

如果需要保留CSRF防护,就通过会话先获取令牌再发起POST请求,修改你的post.py代码如下:

import requests

# 用Session保持会话,自动管理Cookie
session = requests.Session()
# 先发起一次GET请求获取CSRF Cookie,地址可以是你的check接口或者任意返回CSRF令牌的Django页面
session.get('http://127.0.0.1:8000/check')
# 从Cookie中取出CSRF Token
csrf_token = session.cookies.get('csrftoken')

param_tuples = [('login', 'value1'), ('pass', 'value2')]
# POST请求头带上X-CSRFToken字段
response = session.post(
    'http://127.0.0.1:8000/check',
    data=param_tuples,
    headers={'X-CSRFToken': csrf_token}
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 12:06:03