Django模板之认证机制(csrf_token)
csrf认证机制:
django中对POST请求,csrf会进行认证处理,csrf认证机制是防御跨站伪造功能,在没有任何处理的前提下,POST请求会报错。
csrf认证中间件是在process_view执行(通过装饰器强制认证或者放行可知),同时对类中的方法进行CSRF装饰器操作需要:
【注意只能加在dispatch方法上(或者装饰在类上指定dispatch方法),类中单独方法无效】
csrf认证--模板操作:
模板文件中的操作:
django项目中默认对POST请求进行了csrf认证,只需要在模板提交数据的代码块中加入模板标签{{% vsrf_token %}}即可,(不需要注销seetings.py配置文件MIDDLEWARE列表中的'django.middleware.csrf.CsrfViewMiddleware',),模板页面在渲染时会自动在相应位置渲染成隐藏的input标签:<input type="hidden" name="csrfmiddlewaretoken" value="8J4z1wiUEXt0gJSN59dLMnktrXFW0hv7m4d40Mtl37D7vJZfrxLir9L3jSTDjtG8">每次都是随机的
csrf认证--模块操作:
在views.py中首先导入模块:from django.views.decorators.csrf import csrf_exempt,csrf_protect
(1)放行认证:@csrf_exempt
@csrf_exempt #放行csrf认证(即使settings.py中存在全局认证机制,也对此次POST请求的视图函数放行)
def login(request):
if request.method=="GET":
return render(request,"login.html")
elif request.method=="POST":
name=request.POST.get("username")
psd=request.POST.get("userpsd")
status=models.auth(name,psd)
if status:
return HttpResponse("<h1>Success!</h1>")
else:
return render(request,"login_fail.html")
(2)强制认证:@csrf_protect
@csrf_protect #强制csrf认证(即使settings.py中不存在全局认证机制,也对此次POST请求的视图函数强制认证)
def login(request):
if request.method=="GET":
return render(request,"login.html")
elif request.method=="POST":
name=request.POST.get("username")
psd=request.POST.get("userpsd")
status=models.auth(name,psd)
if status:
return HttpResponse("<h1>Success!</h1>")
else:
return render(request,"login_fail.html")
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="refresh" content="">
<meta name="keywords" content="">
<style></style>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<link rel="stylesheet" href="">
<title>login</title>
</head>
<body>
<form action="http://127.0.0.1:8888/login/" method="post">
{# {% csrf_token %}<!--在进行模板渲染时会自动生成一个隐藏的input标签(csrf认证标识)-->#}
<table>
<tr>
<td>用户名:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="text" name="userpsd"></td>
</tr>
<tr>
<td><input type="reset"></td>
<td><input type="submit" ></td>
</tr>
</table>
</form>
</body>
</html>
Django模板之认证机制(csrf_token)的更多相关文章
- 【技术博客】JWT的认证机制Django项目中应用
开发组在开发过程中,都不可避免地遇到了一些困难或问题,但都最终想出办法克服了.我们认为这样的经验是有必要记录下来的,因此就有了[技术博客]. JWT的认证机制Django项目中应用 这篇技术博客基于软 ...
- Django Authentication 用户认证系统
一. Django的认证系统 Django自带一个用户认证系统,用于处理用户账户.群组.许可和基于cookie的用户会话. 1.1 概览 Django的认证系统包含了身份验证和权限管理两部分.简单地说 ...
- Django模板语言与视图(view)
常用语法 {{ }}和{% %} 变量相关的用{{}} , 逻辑相关的用{% %} 变量 在Django的模板语言中按此语法使用:{{ 变量名 }}. 当模版引擎遇到一个变量,它将计算这个变量,然后 ...
- Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)
前言:当我们想在页面上给客户端返回一个当前时间,一些初学者可能会很自然的想到用占位符,字符串拼接来达到我们想要的效果,但是这样做会有一个问题,HTML被直接硬编码在 Python代码之中. 1 2 3 ...
- django模板语法
Django 模板语法 Django 模板语法 一.模板 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法 模板语法变量:{{ }}在Django模板中遍历复杂 ...
- django的forms认证组件
django的forms认证组件 每个网站的注册界面都需要有相应的"认证"功能,比如说认证注册页面的用户名是否已被注册,二次输入的密码是否一致以及认证用户输入的用户名.邮箱.手机号 ...
- Django 2.0 学习(12):Django 模板语法
Django 模板语法 一.模板 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法 模板语法变量:{{ }} 在Django模板中遍历复杂数据结构的关键是句点字 ...
- python 全栈开发,Day79(Django的用户认证组件,分页器)
一.Django的用户认证组件 用户认证 auth模块 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中: 如果用户存在于数据库中,然后再验证用户 ...
- COOKIE与SESSION、Django的用户认证、From表单
一.COOKIE 与 SESSION 1.简介 1.cookie不属于http协议范围,由于http协议无法保持状态,但实际情况,我们却又需要“保持状态”,因此cookie就是在这样一个场景下诞生. ...
随机推荐
- webpack3 babel相关
babel 链接地址 在index.js中写入js6的语法如 let fn = (){ console.log('this is es6') } 执行npm run build 在打包出来的js文件中 ...
- linux find string in files
http://blog.csdn.net/duguduchong/article/details/7716908 查找目录下的所有文件中是否含有某个字符串 find .|xargs grep -ri ...
- libeay32.dll 1.0.2j crash
https://github.com/BOINC/boinc/issues/2470 他们认为是CPU不同造成的 另外一个可能的原因 Changes between 1.0.2j and 1.0.2k ...
- 闲置安卓设备搭建Linux服务器实现外网访问
title: 闲置安卓设备搭建Linux服务器实现外网访问 这是我搭过的第一个博客系统,写贴纪念一下 待博主整理好思路,将今天所用到的全部分享! 好吧,我就是穷.富人靠科技,穷人靠变异.我这种穷人是真 ...
- ajax 技术
ajax 技术 $.ajax({ url:"", type:'GET', success:function(data){ console.log(data); }, error:f ...
- Flutter自己实现一个ProgressHUD
用惯了iOS的SVProgressHUD,但是在flutter pub上的并没有找到类似的实现,于是自己实现一个 主要实现四个基本功能 Loading显示 成功显示 错误显示 进度显示:环形进度条和文 ...
- WCF客户端和服务的实现
WCF客户端和服务 ?服务器端: – 定义和实现服务契约 – 为服务类型构建ServiceHost实例,暴露endpoints – 打开通讯通道 ?客户端: – 需要服务契约的一个副本和关于endpo ...
- Centos7 team 绑定多网卡
1.nmcli connection show 查看所有的网络连接 nmcli connection show 接下来我们要使用 ens37 ens38 两个网卡绑定 , 绑定的网卡取名: agg-e ...
- 70行实现Promise核心源码
70行实现Promise核心源码 前言: 一直以来都是只会调用Promise的API,而且调API还是调用axios封装好的Promise,太丢人了!!!没有真正的去了解过它的原理是如何实现的,自 ...
- python字符串分段组合(更新)
描述 获得输入的一个字符串s,以字符减号(-)分割s,将其中首尾两段用加号(+)组合后输出. ...