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 ...
随机推荐
- VS中git概念解析与深度使用
基础概念 四个区 工作区(Working Area) 暂存区(Stage) 本地仓库(Local Repository) 远程仓库(Remote Repository) 五种状态 未修改(Origin ...
- Windows开启关闭测试模式的方法(含开启测试模式失败的解决办法)
前言: 内含:Windows开启关闭测试模式的方法.开启测试模式失败的解决办法.win10进入bios的方式.BitLocker恢复方式. 对于互联网从业者来说 ...
- vlunhub靶场之EMPIRE: LUPINONE
准备: 攻击机:虚拟机kali.本机win10. 靶机:EMPIRE: LUPINONE,网段地址我这里设置的桥接,所以与本机电脑在同一网段,下载地址:https://download.vulnhub ...
- wpf下的图片放大缩小
WPF下实现图片的放大缩小移动 在windows 7里面有自带的图片查看器,这个软件可以打开一张图片然后以鼠标在图片中的焦点为原点来进行缩放,并且放大后可以随意拖动.下面我们在WPF中实现这个功能 ...
- 文本挖掘与NLP笔记——代码向:分词
分词:jieba.cut words = jieba.cut("我来到北京大学",cut_all=True) print('全模式:'+'/'.join([w for w in w ...
- css文字单行/多行超出显示省略号...
css文字单行/多行超出显示省略号... 项目里写css样式我们经常会遇到将文字超出显示省略号的情况,记录一下以后能用到. 单行超出 .oneline { width:300upx; /*宽度一定要设 ...
- 漫谈Entity-Component-System
原文链接 简介 对于很多人来说,ECS只是一个可以提升性能的架构,但是我觉得ECS更强大的地方在于可以降低代码复杂度. 在游戏项目开发的过程中,一般会使用OOP的设计方式让GameObject处理自身 ...
- [转]VB中资源文件.res的使用方法详解
来源:https://blog.csdn.net/miaozk2006/article/details/82417156 在几乎所有的Windows应用程序中都拥有资源文件,这些文件定义使用应用程序将 ...
- CSS基础知识筑基
01.CSS 简介 CSS 指层叠样式表 (Cascading Style Sheets),对HTML网页内容进行统一外观样式设计和管理,给网页进行各种装饰,让她变得美观,是HTML的化妆师.(Cas ...
- 【题解】CF1714F Build a Tree and That Is It
题面传送门 解决思路 题目中虽然说是无根树,但我们可以钦定这棵树的根为节点 \(1\),方便构造,这是不 影响结果的. 以下记给定的三段长度为 \(a,b,c\). 先考虑无解的情况. 首先,给出的三 ...