首页 > 其他分享 >Django之csrf校验 CBV加装饰器以及auth认证模块

Django之csrf校验 CBV加装饰器以及auth认证模块

时间:2023-01-01 22:44:32浏览次数:37  
标签:request 校验 auth Django CBV user csrf django

目录

Django之csrf校验 CBV加装饰器以及auth认证模块

一、csrf跨站请求伪造

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

模拟钓鱼网站案例:转账案例(底层原理内部隐藏标签)

  • 思考:如何区分真假网站页面发送的请求

二、csrf校验策略(在提交数据的位置添加唯一标识 )

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

三、CBV加装饰器

  • 整个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添加装饰器的方式(与正常情况不一样 需要注意 主要有三种方式)

方式1:单独生效

@method_decorator(csrf_protect)
def post(self, request):
    return HttpResponse('from cbv post view')

方式2:单独生效

@method_decorator(csrf_protect, name='post')
class MyView(views.View):

方式3:整个类中生效

@method_decorator(csrf_protect)
    def dispatch(self, request, *args, **kwargs):
        return super().dispatch(request, *args, **kwargs)

 
注意有一个装饰器是特例只能有一种添加方式>>>:csrf_exempt
 	只有在dispatch方法添加才会生效

四、auth认证模块

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

基于auth_user表编写用户相关的各项功能
登录、校验用户是否登录、修改密码、注销登录等

五、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/')  局部配置 
@login_required						全局配置
配置文件中LOGIN_URL = '/login/'

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相关表没有创建)
AUTH_USER_MODEL = 'app01.UserInfo'

标签:request,校验,auth,Django,CBV,user,csrf,django
From: https://www.cnblogs.com/almira998/p/17019183.html

相关文章

  • Django视频教程 - 基于Python的Web框架(全13集)
    Django是由Python驱动的开源模型-视图-控制器(MVC)风格的Web应用程序框架,使用Django可以在即可分钟内快速开发一个高品质易维护数据库驱动的应用程序。下面是一大坨关于Django......
  • Django中logging的设置
    1.日志基础知识日志与我们的软件程序密不可分。它记录了程序的运行情况,可以给我们调试程序和故障排查提供非常有用的信息。每一条日志信息记录了一个事件的发生。具体而言......
  • Django组件之form组件
    目录Django组件之form组件一、form组件二、forms组件渲染标签三、forms组件展示信息四、forms组件校验补充五、forms组件参数补充六、modelform组件Django组件之form组件......
  • 问题:django中对datetime类型数据在pycharm中sqlite3进行修改时,修改后datetime日期数据
    这是正在修改的  提交完之后  问题原因是sqlite数据库对日期类型不敏感,Pycharm直接插入会变成图中这样的时间戳,用POST请求添加数据或Django自带的后台管理插入不......
  • 【无标题】常见框架:Django框架<全能型框架MTV>
    第一课django环境搭建前言Web框架:url,请求对象,响应对象,模板引擎常见框架:Django框架<全能型框架MTV>/Web.py/flask框架<已经停止维护>/Tornado<facebook维护>Web应用框架......
  • Django自定义分页器
    目录Django自定义分页器一、分页器思路二、自定义分页器的使用Django自定义分页器一、分页器思路分页器主要听处理逻辑代码最后很简单推导流程 1.queryset支持切片......
  • 第一节课django环境搭建
    第一课django环境搭建前言Web框架:url,请求对象,响应对象,模板引擎常见框架:Django框架<全能型框架MTV>/Web.py/flask框架<已经停止维护>/Tornado<facebook维护>Web应用框架......
  • Django模型层
    目录模型层与ORM一、初步认识ORM二、ORM常用关键字三、ORM查询SQL语句的方法四、神奇的双下划线查询五、ORM外键字段创建1.ORM外键字段创建理论铺垫2.ORM外键字段创建相关......
  • Django——全局配置settings详解
    Django设置文件包含你所有的Django安装配置。这个文件一般在你的项目文件夹里。比如我们创建了一个名为mysite的项目,那么这个配置文件setting.py就在项目里的mysite文件夹......
  • Django模板层
    目录Django模板层一、关于模板语法二、模板层之标签二、自定义过滤器、标签三、模板的继承与导入四、模板层前期准备Django模板层一、关于模板语法针对需要加括号调用的......