如何为两个Django应用间的纯REST API通信配置CSRF令牌?
解决Django后端间POST请求的CSRF禁止问题
方法1:用csrf_exempt装饰器跳过CSRF验证
如果这个接口仅用于后端之间调用,可直接给接收POST请求的视图函数添加该装饰器,跳过CSRF校验:
from django.views.decorators.csrf import csrf_exempt from django.http import HttpResponse @csrf_exempt def target_api_view(request): if request.method == 'POST': # 编写POST请求处理逻辑 return HttpResponse("请求处理成功")
方法2:配置信任对方后端域名
若不想完全关闭CSRF验证,可在接收请求的Django项目settings.py中,将对方后端的域名加入信任列表,来自该域名的请求会自动跳过CSRF校验:
CSRF_TRUSTED_ORIGINS = [ "https://other-backend-domain.com", # 替换为实际的对方后端域名 "http://other-backend-domain.com", ]
方法3:改用Token认证(API服务推荐方案)
纯API服务更适合用Token认证替代CSRF,既保证接口安全,又避免CSRF限制:
- 安装并配置Django REST Framework
- 在
settings.py中启用Token认证:
INSTALLED_APPS = [ ... 'rest_framework', 'rest_framework.authtoken', ] REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': [ 'rest_framework.authentication.TokenAuthentication', ], }
- 给对方后端生成专属Token,对方发送POST请求时,在请求头中携带
Authorization: Token <生成的Token>即可正常访问。
内容的提问来源于stack exchange,提问作者Akaisteph7
相关产品推荐
相关产品推荐

