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 ...
随机推荐
- HDU1561 The more, The Better(树形背包)
通过这道题对树形背包理解更深一步...... 有几个地方需要注意: 1.本题数据结构为森林,需增加一个超根作为根节点,M+=1(后面解释). 2.本题有拓扑序的限制,通过vector建成的一棵树中,必 ...
- 洛谷P1496 火烧赤壁 (模拟/离散化+差分)
分析可知:将起点和终点按照从小到大的顺序排序,对答案不会产生影响 所以此时我们得到一种模拟做法: 1 #include<bits/stdc++.h> 2 using namespace s ...
- [Android开发学iOS系列] ViewController
iOS ViewController 写UIKit的代码, ViewController是离不开的. 本文试图讲讲它的基本知识, 不是很深入且有点杂乱, 供初级选手和跨技术栈同学参考. What is ...
- iptables使用详解
iptables使用详解 @(linux)[iptables] 前言 最近买了一个VPS,并在上面搭了DOCKER,然后再DOCKER中安装Mysql.但只要将网络端口映射到宿主机上,那么外部网络就可 ...
- [Thread] Synchronized
1.Monitor对象 Monitor对象被称为管程或者监视器锁. 在Java中,每一个对象实例都会关联一个Monitor对象. 这个Monitor对象既可以与对象一起创建销毁,也可以在线程试图获取对 ...
- 2022年最新最详细的tomcat安装教程和常见问的解决
文章目录 1.官网直接下载 1.1.jdk的版本和tomcat版本应该相对应或者兼容 1.2. 在官网找对应的tomcat版本进行下载 1.3 .根据电脑版本下载64-bit windows zip( ...
- mybatisPlus在Springboot中的使用
文章目录 1.简介 2.支持的数据库 3.框架 4.创建一个springboot项目 4.1 .pom文件中加入依赖 4.2.yml文件的配置 4.3 .数据库脚本 4.4.实体类 4.5 .启动类添 ...
- LINQ使用小贴士
LINQ中的排序操作符 OrderBy:按升序对序列的元素进行排序.OrderByDescending:按降序对序列的元素排序.ThenBy:按升序对序列中的元素执行后续排序.ThenByDescen ...
- VS使用正则表达式删除程序中的空行
Ctrl+H; 需要替换的正则表达式 ^(?([^\r\n])\s)*\r?$\r?\n
- vs自定义工程宏
[视图] ---->[其他窗口]----> [属性管理器 ]右键工程---->[添加新项目属性表]打开配置debug/release打开propertysheet找到用户宏即可添加