Django前后端分离架构下动态获取CSRF Token的方法

Felix
Felix
发布时间:2026-10-14| 4人浏览过
原创

本文详解Django在前后端分离场景下如何动态获取CSRF Token。通过自定义视图函数利用get_token接口返回Token,并配置URL路由。针对跨域导致Token失效的问题,建议使用Nginx反向代理统一域名。最后演示如何在Postman中通过Headers正确携带Token以避免403错误。

需求

在常规Django开发中,为防止CSRF攻击,若使用模板渲染页面,Django会自动在请求中注入名为csrftoken的Cookie数据。然而,在前后端分离的项目架构中,由于不依赖Django的模板渲染功能,前端无法直接获取该Cookie,因此需要一种动态获取CSRF Token的机制。

Django 通过 request 请求获取 csfttoken 的方法


from django.middleware.csrf import get_token
 
def getToken(request):
  token=get_token(request)
  return HttpResponse(json.dumps({'token':token}), content_type="application/json,charset=utf-8")

利用Django提供的接口可以成功获取csrftoken数据,下文将通过具体示例进行演示。

Django 后端获取 csrftoken 示例

在视图 views.py 设置 getToken 方法


from django.middleware.csrf import get_token
 
# 获取cstftoken
def getToken(request):
  token = get_token(request)
  return HttpResponse(json.dumps({'token': token}), content_type="application/json,charset=utf-8")

在 urls.py 配置URL


from django.urls import path, re_path
 
from . import views
 
urlpatterns = [
 
  # ex:/assetinfo/getToken
  path('getToken', views.getToken, name='getToken'),
  ...
]

使用 postman 测试接口,获取 csrftoken

 

上述步骤实现了基本功能,能够动态获取csrftoken。但需注意,若涉及跨域请求,直接获取csrftoken可能会失效。

尝试在Django中配置跨域返回Token的方式并不可行,因为不同域名下使用的csrftoken与原始防止CSRF攻击的设计初衷相悖。

最佳解决方案是使用Nginx作为本机代理,分别对前端和后端服务进行反向代理,并统一提供一个域名。这样即可正常使用csrftoken机制。

在 postman 设置使用 csrftoken

若要在Postman中使用csrftoken,只需将获取到的csrftoken值设置到请求的Headers中,具体配置如下:

 


{"X-CSRFToken":"K6q7uqt9J8UocELWR04pw2DKd8T2LRNWjf2uQvsFBWm87Q1lJZQV1vj3pR8REzCR"}

若不设置该Header,请求将会被拒绝并返回403错误,具体报错信息如下:

 

到此这篇关于Django前后端分离csrf token获取方式的文章就介绍到这了,更多相关Django csrf token获取内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。