Django模板标签CSRF

一些简单的不说。主要讲{%csrf_token%}标签

当在Django中使用 {%csrf_token%} 标签时候,其实是在表单中加入一个隐藏的input标签,用来存储一个特定的CSRF令牌(Token),这个令牌是服务器生成的随机值,在用户每次访问包含CSRF保护的表单页面时都会生成一个新的令牌。

在用户提交表单时,Django会检查请求中是否包含了这个CSRF令牌,并验证其有效性。如果请求中的CSRF令牌不匹配或者不存在,服务器将拒绝这个请求,从而保护网站免受CSRF攻击。

下面我将举个例子:

1、在 HTML 表单模板文件中包含 {% csrf_token %} 标签:

html 复制代码
<form method="post">
    {% csrf_token %}
    <input type="text" name="username" placeholder="Username">
    <input type="password" name="password" placeholder="Password">
    <button type="submit">Login</button>
</form>

2、在处理表单数据的 Django 视图中,确保使用 @csrf_protect 装饰器保护该视图:

javascript 复制代码
from django.views.decorators.csrf import csrf_protect
from django.shortcuts import render
from django.http import HttpResponse

@csrf_protect
def login_view(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        # 处理用户登录逻辑
        return HttpResponse('Login successful!')
    else:
        return render(request, 'login_form.html')

在这个例子中,用户在提交登录表单时将包含一个CSRF令牌。

在login_view视图中,我们使用了@csrf_protect 装饰器确保在处理 POST 请求时进行 CSRF 保护。

通过这种方式,Django 能够有效地防止 CSRF 攻击,提高网站的安全性。

相关推荐
用户938515635071 小时前
工厂模式与 Nest.js 核心思想 —— 从蜜雪冰城到企业级架构
后端·设计模式·nestjs
用户938515635071 小时前
实战 Todo CRUD —— 从路由到异常,手写一个完整模块
后端·typescript·nestjs
XLYcmy1 小时前
京东 算法实习一面 下+手撕
c++·python·llm·概率论·数据处理·训练·codebert
虎头金猫2 小时前
如何在群晖NAS上通过Docker部署CloudSaver?群晖部署CloudSaver教程|聚合资源搜索并实现远程访问
运维·服务器·网络·python·docker·容器·pandas
从零开始学习人工智能2 小时前
WSL2部署CUDA12+cuDNN9踩坑实录:ONNX Runtime GPU推理环境搭建全流程
python
m0_380743872 小时前
从零调用 Claude 教程
开发语言·python·node.js
GetcharZp2 小时前
Qdrant 向量数据库 Golang 实战指南:从零构建高性能检索应用
后端
hsfxuebao2 小时前
OpenSpec 完整使用流程笔记 (SDD)
后端
唐青枫2 小时前
别把 struct 只当成数据盒子:Zig 结构体从入门到实战
后端
why技术3 小时前
AI 写的文章,可能都带着手敲一遍都去不掉的“隐形水印”。
前端·人工智能·后端