Django框架:13、csrf跨站请求伪造、auth认证模块及相关用法
Django框架
一、csrf跨站请求伪造
1、简介
csrf是django默认中间件中的一道,它用于验证网页的真伪性,通过在在前端页面设置csrf_token令牌,这样转递到后端的信息将会在csrf中间件中进行验证,虚假的网站中不会有csrf令牌的键值对,这样就虚假的网站所传递来的信息将会被csrf中间件所阻挡,无法通过django的中间件层

2、csrf校验策略
form表单csrf策略
通过在form表单内添加{% csrf_token %}
<body>
<form action="" method="post">
{% csrf_token %}
<p>用户名:
<input type="text" name="name" value="">
</p>
<p>密码:
<input type="password" name="pwd" value="">
</p>
<input type="submit" value="提交">
</form>
</body>

在form表单内部添加csrf令牌后,表单内部将会自动生成一个input标签,该标签内部会生成一个name属性和value属性,value属性的值在每次刷新页面时自动生成,当我们在再点击提交后该标签内的值会被传递到django的csrf中间件中进行验证,如果验证没有通过此次提交的所有数据都不会生效
ajax请求csrf策略
方式一:手动添加csrf键值对
<script>
$('#button').click(function () {
$.ajax({
url:'',
type:'post',
data: {'csrfmiddlewaretoken':$('input[name="csrfmiddlewaretoken"]').val()}
})
})
</script>
方式二:利用模板语法获取
<script>
$('#button').click(function () {
$.ajax({
url:'',
type:'post',
data:{'csrfmiddlewaretoken':'{{ csrf_token }}'}
})
})
</script>
方式三:导入官方JS脚本
参考:https://www.cnblogs.com/Dominic-Ji/p/9234099.html
3、csrf相关装饰器
在我们编写代码时,可能并不是所有的视图函数都需要校验csrf,例如:
1.整个django项目都校验csrf 但是某些个视图函数\类不想校验
2.整个django项目都不校验csrf 但是某些个视图函数\类需要校验
这时候可以通过以下几种方法来进行验证或取消验证
FBV添加装饰器方式
1、导入模块:
from django.views.decorators.csrf import csrf_exempt, csrf_protect
2、具体用法:
# 校验csrf (settings中csrf中间件没有打开的情况下也会校验)
@csrf_protect
def transfer_func(request):pass
# 不校验csrf
@csrf_exempt
def transfer_func(request):pass
CBV添加装饰器方式
1、导入模块:
from django.views.decorators.csrf import csrf_exempt, csrf_protect
from django.utils.decorators import method_decorator
from django.views import View
2、全局不校验的情况下将指定的类/功能函数校验:(三种方式)
# 方式一:指定类下某个功能函数进行校验
@method_decorator(csrf_protect, name='post')
class Login(views.View):
def post(selfs, request):
pass
# 方式二:直接将类中将需要校验的功能函数进行装饰
class Login(views.View):
@method_decorator(csrf_protect)
def post(selfs, request):
pass
# 方式三:该类中所有功能函数都校验csrf
class Login(views.View):
@method_decorator(csrf_protect)
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
def post(selfs, request):
pass
2、全局校验csrf的情况下指定类不校验:(一种方式)
class Login(views.View):
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request, *args, **kwargs)
def post(selfs, request):
pass
二、auth认证模块
1、简介
django自带一个admin路由 但是需要我们提供管理员账号和密码
如果想要使用admin后台管理 需要先创建表 然后创建管理员账号,直接执行数据库迁移命令即可产生默认的auth_user表,该表就是admin后台管理默认的认证表

创建超级管理员
1、创建超级管理员需要在pycharm的终端中输入指令:
python38 manage.py createsuperuser
2、auth认证相关模块及操作
auth 模块
1、导入模块
from django.contrib import auth
2、相关功能:
1.获取用户(判断用户名和密码)
user_obj = auth.authenticate(request,
username=username,
password=password)
# 需要传入三个固定参数,request对象、用户名、密码,返回用户对象
2.记录用户登陆状态(在前端保存cokie)
auth.login(request,user_obj)
User 模块
1、导入模块:
from django.contrib.auth.models import User
2、相关功能:
1.创建普通用户
User.objects.create_user(username=username, password=password)
2.获取登录用户对象数据(需要先用auth模块保存用户登陆状态,未登陆获取到的时匿名)
request.user
3.判断用户是否登录(需要先用auth模块保存用户登陆状态)
request.user.is_authenticated
4.校验原密码是否正确(需要先用auth模块保存用户登陆状态)
request.user.check_password(原密码)
5.修改密码(需要先用auth模块保存用户登陆状态)
request.user.set_password(新密码)
request.user.save()
6.退出登录(需要先用auth模块保存用户登陆状态)
auth.logout(request)
login_required 模块
1、导入模块:
from django.contrib.auth.decorators import login_required
2、相关功能: # 用于校验用户是否登录,未登录可以控制跳转页面
1.@login_required(login_url='/login/') 局部配置
2.@login_required 全局配置
配置文件中LOGIN_URL = '/login/'
3、拓展auth_user表
还想使用auth模块的功能 并且又想扩展auth_user表的字段
思路1:一对一字段关联
思路2:替换auth_user表
步骤1:模型层编写模型类继承AbstractUser
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
# 填写AbstractUser表中没有的字段
phone = models.BigIntegerField()
desc = models.TextField()
步骤2:一定要在配置文件中声明替换关系
AUTH_USER_MODEL = 'app01.UserInfo'
ps:替换还有一个前提 就是数据库迁移没有执行过(auth相关表没有创建)
Django框架:13、csrf跨站请求伪造、auth认证模块及相关用法的更多相关文章
- django CBV装饰器 自定义django中间件 csrf跨站请求伪造 auth认证模块
CBV加装饰器 第一种 @method_decorator(装饰器) 加在get上 第二种 @method_decorator(login_auth,name='get') 加在类上 第三种 @met ...
- 第三百一十五节,Django框架,CSRF跨站请求伪造
第三百一十五节,Django框架,CSRF跨站请求伪造 全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.midd ...
- 十三 Django框架,CSRF跨站请求伪造
全局CSRF 如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF #中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMidd ...
- Web框架之Django重要组件(Django中间件、csrf跨站请求伪造)
Web框架之Django_09 重要组件(Django中间件.csrf跨站请求伪造) 摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是 ...
- Django中的CSRF(跨站请求伪造)
Django中的CSRF(跨站请求伪造) Django CSRF 什么是CSFR 即跨站请求伪装,就是通常所说的钓鱼网站. 钓鱼网站的页面和正经网站的页面对浏览器来说有什么区别? (页面是怎么来的? ...
- Web框架之Django_09 重要组件(Django中间件、csrf跨站请求伪造)
摘要 Django中间件 csrf跨站请求伪造 一.Django中间件: 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于 ...
- django 中间键 csrf 跨站请求伪造
django中间件和auth模块 Django中间件 由django的生命周期图我们可以看出,django的中间件就类似于django的保安,请求一个相应时要先通过中间件才能到达django后端( ...
- Django框架 之 基于Ajax中csrf跨站请求伪造
Django框架 之 基于Ajax中csrf跨站请求伪造 ajax中csrf跨站请求伪造 方式一 1 2 3 $.ajaxSetup({ data: {csrfmiddlewaretoken: ...
- Django框架(十二)-- 中间件、CSRF跨站请求伪造
中间件 一.什么是中间件 请求的时候需要先经过中间件才能到达django后端(urls,views,templates,models) 响应的时候也需要经过中间件才能到达web服务网关接口 djang ...
- Django框架(十六)-- 中间件、CSRF跨站请求伪造
一.什么是中间件 中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出 二.中间件的作用 如果你想修改请求,例如被传送到view ...
随机推荐
- git中 gitignore 忽略文件操作
通常,.gitignore文件被放置在存储库的根目录中.根目录也称为父目录和当前工作目录.根文件夹包含组成项目的所有文件和其他文件夹.也就是说,您可以将它放在存储库中的任何文件夹中.你甚至可以有多个. ...
- React魔法堂:echarts-for-react源码略读
前言 在当前工业4.0和智能制造的产业升级浪潮当中,智慧大屏无疑是展示企业IT成果的最有效方式之一.然而其背后怎么能缺少ECharts的身影呢?对于React应用而言,直接使用ECharts并不是最高 ...
- 【算法】Tarjan
参考资料: 图论相关概念 - OI WIKI | 强连通分量 - OI WIKI 初探tarjan算法 | Tarjan,你真的了解吗 一.概念 • 子图: 对一张图 \(G=(V,E)\),若存在另 ...
- LcdTools如何编写MIPI指令(初始化代码)
在LcdTools帮助文档中查看MIPI读写指令描述,如下图 编写LCM初始化代码就是配置LCM Driver IC寄存器值,一般只需用MipiWrite()指令写参数即可:下面介绍MipiWrite ...
- springMVC必要jar包
spring-aop-4.3.2.RELEASE.jar :: 包含在应用中使用Spring 的AOP 特性时所需的类和源码级元数据支持. spring-beans-4.3.2.RELEASE.jar ...
- 十四、资源控制器之RS
RC (ReplicationController )主要的作用就是用来确保容器应用的副本数始终保持在用户定义的副本数 .即如果有容器异常退出,会自动创建新的 Pod 来替代:而如果异常多出来的容器也 ...
- 通过tkinter列出全部字体名称
通过tkinter列出windows系统全部字体名称 通过 tkinter.font 的 families() 函数实现 import tkinter import tkinter.font # 把p ...
- C语言白盒测试讲义
好久没有做过C语言的白盒测试了,估计以后也没这个机会.把自己之前参加过的培训素材做个分享. 素材下载链接:https://pan.baidu.com/s/1LPD9Az04zEj8RuCICaKYxQ ...
- Java反应式编程(1)
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 前面把Java函数式编程的由来和最主要的核心知识点讲完了.包括比较难懂的Lambda表达式是怎么演变而来的也全部都撸了一遍.Lambda表达式这 ...
- HTTPS详解二
前言 在上篇文章中,我已经为大家介绍了 HTTPS 的详细原理和通信流程,但总感觉少了点什么,应该是少了对安全层的针对性介绍,那么这篇文章就算是对HTTPS 详解一的补充吧.还记得这张图吧. HTTP ...