首页 > 其他分享 >Django框架11

Django框架11

时间:2023-01-02 14:44:14浏览次数:32  
标签:11 框架 request 校验 auth Django user csrf django

今日内容概要

  • csrf跨站请求伪造
  • csrf相关校验策略
  • CBV添加装饰器的多种方式
  • auth认证模块

今日内容详细

csrf跨站请求伪造

钓鱼网站:模仿一个正规的网站 让用户在该网站上做操作 但是操作的及诶过会影响到用户正常的网站账户 但是其中有一些猫腻
	如:英语四六级考试需要网上先缴费 但是你会发现卡里的钱扣了 但是却交到了一个莫名其妙的账户 并不是真正的四六级官方账户

模拟钓鱼网站案例:转账案例
原理其实就是内部隐藏标签 

csrf校验策略

在提交数据的位置添加唯一标识

1.form表单csrf策略
	form表单内部添加{% csrf_token %}
2.ajax请求csrf策略
	方式1:自己动手取值 较为繁琐
		data: {'csrfmiddlewaretoken':$('input[name="csrfmiddlewaretoken"]').val()}
	方式2:利用模板语法自动获取(一定要用引号引起来)
		data:{'csrfmiddlewaretoken': '{{ csrf_token }}'}
	方式3:直接引入一个js脚本即可(官网提供的)
		参考:https://www.cnblogs.com/Dominic-Ji/p/9234099.html

csrf相关装饰器

整个django项目都校验csrf 但是某些视图函数/类不想要校验
整个django项目都不想校验csrf 但是某些视图函数/类需要校验

FBV添加装饰器的方式(与正常的函数添加装饰器一致)
# 导入装饰器
from django.views.decorators.csrf import csrf_exempt, csrf_protect

# @csrf_exempt # 局部禁用
@csrf_protect # 局部使用
def transfer_func(request):pass

CBV添加装饰器的方式(与正常情况不一样 需要注意)
主要有三种方式
# 导入装饰器
from django.utils.decorators import method_decorator

方式1:直接加在类上 但是必须得有name参数
@method_decorator(csrf_protect, name='post')
class MyView(views.View): 
    
方式2: 加在dispatch方法上 整个类中生效
    @method_decorator(csrf_protect)
    def dispatch(self, request, *args, **kwargs):
        return super().dispatch(request, *args, **kwargs)
    
方式3:加在加在CBV视图的get或post方法上
    @method_decorator(csrf_protect):
    def post(self, request):
        return HttpResponse('from cbv post view')
注意:有一个装饰器是特例 只有一种添加方式>>>:csrf_exempt
	只有加在dispatch方法上才会生效

auth认证模块

前戏:django自带一个admin路由 但是需要我们提供管理员账号和密码
如果想要使用admin后台管理 需要先创建表 然后创建管理员账号
直接执行数据库迁移命令即可产生默认的auth_user表 该表就是admin后台管理默认的认证表

创建超级管理员
	python38 manage.py createsuperuser

auth认证相关模块及操作

from django.contrib import auth
from django.contrib.auth.models import User

1.用户注册功能
	User.objects.create_user(username=username, password=password)
2.判断用户名和密码是否正确
	user_obj = auth.authenticate(request, username=username, password=password) # 当用户名与密码正确时 会返回一个对象
3.判断用户是否登录
	request.user.is_authenticated
4.获取登录用户对象数据
	request.user
5.校验用户是否登录装饰器
	from django.contrib.auth.decorators import login_required
	局部配置
		@login_required(login_url='/login/')
	全局配置
		现在settings中配置一个LOGIN_URL = '自定义的登陆页面的路由'
		@login_required
6.校验原密码是否正确
	request.user.check_password(原密码)
7.修改密码
	request.user.set_password(新密码)
	request.user.save() # 一定要保存 否则不生效
8.退出登陆
	auth.logout(request)

扩展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相关表还没有创建)

标签:11,框架,request,校验,auth,Django,user,csrf,django
From: https://www.cnblogs.com/lzjjjj/p/17019889.html

相关文章

  • Django基础
    Django基础一、Django简介以及基本使用二、Django与数据库连接三、Django路由层四、Django视图层五、Django模板层六、Django模型层七、Django组件之Ajax请求八、......
  • 第十一章《Java实战常用类》第11节:NumberFormat类和DecimalFormat类
    ​NumberFormat类用于格式化数字,它位于java.text包下,是一个抽象类,因此不能通过构造方法创建对象,通常NumberFormat类是通过getInstance()或getXXXInstance()静态方法来获得它......
  • /home/software/python/Modules/_ctypes/_ctypes.c:118:17: fatal error: ffi.h: No s
     001、python3.11编译报错/home/software/python/Modules/_ctypes/_ctypes.c:118:17:fatalerror:ffi.h:Nosuchfileordirectory  002、解决方法[root@PC......
  • 大数据趣味学习探讨(一):学习框架的重要性
    文章目录​​学习框架的重要性​​​​一、痛点​​​​二、规则vs元规则​​​​三、无穷无尽的新问题​​​​四、感悟​​学习框架的重要性框架类似底层方法论,有人说学习......
  • Django中models的字段
    常见的field类型:1.AutoField自增字段,它是一个根据ID自增长的IntegerField字段,通常不用自己设置,如果没有设置主键,django会自动添加它为主键字段2.CharField(max_length=n......
  • gluon 基于浏览器+nodejs 的桌面应用开发框架
    gluon基于浏览器+nodejs的桌面应用开发框架,好处是相对轻量,只使用系统浏览器,对于nodejs可以支持包含以及不包含模式目前支持chrome以及firfox浏览器器,打包的应用相对比......
  • win11右键复原为之前系统状态
    文字版恢复旧版命令:reg.exeadd"HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32"/f重新启用新版:reg.exedelete"HKCU\Softw......
  • Django中render()函数和redirect()函数
    render()作用:render是渲染变量(结合一个给定的模板和一个给定的上下文字典)在模板中,通俗点将context的内容,加载进模板中定义的文件,通过浏览器渲染呈现。render()方法常用的......
  • Go语言微服务框架go-micro(入门)
    Micro用于构建和管理分布式系统,是一个工具集,其中go-micro框架是对分布式系统的高度抽象,提供分布式系统开发的核心库,可插拔的架构,按需使用简单示例编写protobuf文件:synt......
  • 【博学谷学习记录】超强总结,用心分享。spring框架一些重要知识点。
    1.1Spring的两大核心是什么?谈一谈你对IOC的理解?谈一谈你对DI的理解?谈一谈你对AOP的理解? 1.Spring的两大核心是:IOC(控制反转)和AOP(面向切面编程)DI(依赖注入)2.......