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 攻击,提高网站的安全性。

相关推荐
青 春 记 忆1 小时前
零基础入门Python11|Git实战:为任务管理器建立版本历史
开发语言·git·vscode·python·python3.11
To_OC1 小时前
从一行入口代码啃透 NestJS:工厂模式、装饰器和依赖注入是怎么串起来的
后端·设计模式·nestjs
Python私教1 小时前
多个项目怎么安全合并?先适配,再切换
后端·python·架构
Python私教3 小时前
从表格到管理系统:别先写页面,先补齐权限、流程和审计
数据库·后端·架构
北斗落凡尘3 小时前
LangGraph 入门实战(12)--使用MCP
后端·python·langchain
jdksjw4 小时前
同步与异步、阻塞与非阻塞、多线程、协程超详细讲解(Python并发编程从入门到精通)
开发语言·python
Mike_Zhang4 小时前
使用python统计FreeSWITCH呼叫并发
python·freeswitch
SL-staff4 小时前
技术实践:HR如何用JVS-Logic可视化编排实现考勤数据同步(含节点配置与异常处理)
开发语言·python·低代码·钉钉·可视化编排·jvs-logic·hr技术
SomeB1oody5 小时前
【RustyML入门】6.0. 数学工具
开发语言·后端·机器学习·rust·教程
IT_陈寒5 小时前
为什么我的JavaScript闭包总是漏掉那个变量?
前端·人工智能·后端