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

不使用Django模板时,如何生成CSRF Token?

解决Django非模板页面获取CSRF Token输入元素的问题

别担心,这个场景我碰到过好多次——赶开发进度不想动已有的自定义HTML,又要解决CSRF的问题,其实有非常直接的办法:

核心思路

Django提供了手动获取CSRF Token的方法,你可以直接在视图里生成对应的<input>元素,然后插入到你的自定义HTML内容中即可。

步骤1:导入必要的工具

首先在你的视图文件里导入获取CSRF Token的函数:

from django.middleware.csrf import get_token

步骤2:在视图中动态生成CSRF输入元素

拿到request对象后,调用get_token(request)就能获取当前用户会话的CSRF Token,然后手动拼接出对应的隐藏输入框:

def custom_html_view(request):
    # 获取当前请求的CSRF Token
    csrf_token = get_token(request)
    # 构造CSRF隐藏输入元素
    csrf_input = f'<input type="hidden" name="csrfmiddlewaretoken" value="{csrf_token}">'
    
    # 你的自定义HTML内容(这里用示例代替你实际的代码)
    custom_html = f'''
    <!DOCTYPE html>
    <html>
    <head>
        <title>自定义页面</title>
    </head>
    <body>
        <form method="POST" action="/your-submit-url/">
            {csrf_input}
            <!-- 你的其他表单字段 -->
            <input type="text" name="username" placeholder="用户名">
            <button type="submit">提交</button>
        </form>
    </body>
    </html>
    '''
    
    return HttpResponse(custom_html)

关键注意事项

  • 确保CSRF中间件启用:检查你的settings.py里的MIDDLEWARE列表,确认django.middleware.csrf.CsrfViewMiddleware存在(默认是启用的,如果被注释了要打开)。
  • 不要硬编码Token:每个用户的CSRF Token是会话唯一的,必须通过get_token(request)动态获取,不能写死在HTML里。
  • 表单字段名要正确:输入元素的name属性必须是csrfmiddlewaretoken,这是Django识别CSRF Token的固定名称。

如果之后你有时间把HTML迁移到Django模板,再换回{% csrf_token %}标签就行,现在这个方法完全能满足快速开发的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:22:08