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

如何为Django的validate_booking视图启用CSRF并返回令牌?及模板释义

Django CSRF令牌处理及模板疑问解答

一、让validate_booking视图返回CSRF令牌(供Postman调用)

你的视图目前仅处理POST请求,而CSRF令牌需要先通过GET请求获取,再在POST请求中携带验证。按以下步骤调整:

  1. 确认CSRF中间件已启用
    检查项目settings.py的MIDDLEWARE列表,确保包含django.middleware.csrf.CsrfViewMiddleware——这是Django默认启用的配置,一般无需额外修改。

  2. 修改视图逻辑,支持GET请求返回令牌
    导入必要模块,调整视图代码,让GET请求返回CSRF令牌,POST请求保留原有逻辑并验证CSRF:

from django.middleware.csrf import get_token
from django.http import JsonResponse, HttpResponseServerError
import json

@csrf_protect
def validate_booking(request):
    if request.method == "GET":
        # 获取并返回CSRF令牌
        csrf_token = get_token(request)
        return JsonResponse({"csrf_token": csrf_token})
    elif request.method == "POST":
        # 原有POST业务逻辑
        body = json.loads(request.body)
        booking_details = body["booking_details"]

        DATA = {
            "name": booking_details["name"],
            "nric": booking_details["nric"],
            "booking_id": booking_details["booking_id"]
        }

        return JsonResponse({"status": "success"}, status=200)
    else:
        return HttpResponseServerError("Invalid HTTP method")
  1. Postman调用流程
  • 先发送GET请求到该接口,提取返回的csrf_token值;
  • 发送POST请求时,在请求头中添加X-CSRFToken字段,值为获取到的令牌,同时在请求体传入JSON数据即可完成验证。

二、官方文档中a_template.html的含义

a_template.html是Django的HTML模板文件,用于渲染服务器端页面。在官方示例中,render函数会把上下文数据c传入模板,模板内可通过{% csrf_token %}标签自动生成一个隐藏的<input>标签,包含CSRF令牌值。当用户在页面提交表单时,这个令牌会随表单数据自动发送,完成CSRF验证。

这种方式适配传统服务器渲染页面的场景,而你的场景是纯API接口(返回JSON),无需依赖模板,直接通过GET请求返回令牌即可满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 21:01:44