首页 > 其他分享 >- csrf跨站请求的相关装饰器 - Auth模块的使用 - 凡是跟登录、注册、修改密码、注销登录、验证是否登录等的功能都可以使用Auth模块实现 - 扩展auth_user表 - BBS项目的需

- csrf跨站请求的相关装饰器 - Auth模块的使用 - 凡是跟登录、注册、修改密码、注销登录、验证是否登录等的功能都可以使用Auth模块实现 - 扩展auth_user表 - BBS项目的需

时间:2023-08-13 13:12:40浏览次数:39  
标签:模块 登录 request auth Auth csrf password user

csrf跨站请求的相关装饰器

 Django中有一个中间件对csrf跨站做了验证,我只要把csrf的这个中间件打开,意味着所有的方法都要被验证

在所有的视图函数中:
  只有几个视图函数做验证
  只有几个函数不做验证

csrf_protect: 哪个视图函数加了这个装饰器,这个函数就会做验证
 csrf_exempt:哪个视图函数加了这个装饰器,这个函数就不会做验证

from django.views.decorators.csrf import csrf_exempt,csrf_protect
# @csrf_protect
@csrf_exempt
def index(request):
    return render(request, 'index.html')

# @csrf_protect
def func(request):
    return render(request, 'func.html')

 

CBV针对于csrf_exempt:只有第三张方式才生效,其余两种方式不行
CBV针对于csrf_protect:三种方式都可以

from django.views.decorators.csrf import csrf_exempt,csrf_protect
# @method_decorator(csrf_exempt,name='post') # 第二种方式也不行
# @method_decorator(csrf_protect,name='post') # 第二种方式也行
class Login(View):
    # @method_decorator(csrf_exempt)  # 第三张方式可以
    @method_decorator(csrf_protect)  # 第三张方式可以
    def dispatch(self, request, *args, **kwargs):
        return super().dispatch(request, *args, **kwargs)
    # 不让post方法做验证
    # @method_decorator(csrf_exempt)  # 第一种方式不行
    # @method_decorator(csrf_protect)  # 第一种方式行
    def post(self, request):
        print("post")
        return HttpResponse("post")

Auth模块的使用

Auth模块是什么

Auth模块是Django自带的用户认证模块:

我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。

Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统–auth,它默认使用 auth_user 表来存储用户数据。

 在执行数据库迁移命令的时候,会自动生成一个默认的表,其中有auth_开头的很多表
 auth_user表的作用:djagno自带的后台管理系统所依赖的数据就在这张表中
默认情况下,auth_user表是空表,没有用户名和密码,因此我们需要自己创建用户数据
需要创建一个超级管理员账号才能登录:python38 manage.py createsuperuser

Auth模块的相关方法

登录功能、注册功能、修改密码、退出系统、认证功能等学习如何使用

登录功能

user_obj = auth.authenticate(request, username=username, password=password)
print(user_obj) # None

auth.login(request, user_obj) # request.session['username'] = user_obj.usernane

装饰器

@login_required(login_url='/order/login/')  # 局部设置跳转路径
def order(request):
    pass

LOGIN_URL = '/login/' # 全局配置

Auth模块之退出系统

def logout(request):
    # 清除cookie或者session
    auth.logout(request)
    return redirect('/home/')

 

Auth模块之修改密码功能

is_right = request.user.check_password(old_password)

# 修改密码
request.user.set_password(new_password) # 这种写法没有真正的操作数据库
request.user.save()

Auth模块之注册功能

from django.contrib.auth.models import User
# 入库
# User.objects.create(username=username, password=password)
# User.objects.create_user(username=username, password=password)
User.objects.create_superuser(username=username, password=password,email='[email protected]')

扩展默认的auth_user表

# 默认情况下使用的就是auth_user的默认字段
# 扩展我们自己的字段

# 前提是:所有的模型类都继承
from django.contrib.auth.models import AbstractUser

# 不要继承了models.Model
扩展之后需要在配置文件中加一句话

"""""在扩展表之前数据库不能够迁移,扩展这个表需要在迁移数据库之前做"""""
# 如果你迁移了,还想扩展怎么办?
1. 换库
2. 需要删除很多个应用的migrations文件夹

python manage.py migrate myapp --fake

"""
扩展表之后发生的变化:
1. 原来的auth_user表不存在了,换成你自己新建的表名了
2. 原来的auth_user表中的字段还都在,然后多了自己扩展的字段
3. 继承的类要发生改变AbstractUser
4. 在配置文件中加入下面一句话:
AUTH_USER_MODEL = 'app01.UserInfo'
AUTH_USER_MODEL = '应用名.类名'
5. 扩展之后还是按照原来的auth_user表使用
6. auth模块中的数据还是你扩展的表
7. 扩展之前别迁移.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

标签:模块,登录,request,auth,Auth,csrf,password,user
From: https://www.cnblogs.com/shanghaipudong/p/17626431.html

相关文章

  • 禁用账号密码使用ssh私钥登录服务器
    1、生成ssh信息id_rsa为私钥,id_rsa.pub为公钥。私钥自己下载到本地电脑妥善保存(丢失后就无法再登陆了)建议删除服务器端的私钥。公钥则可以任意公开。ssh-keygen-trsa--------------------------------------输入生成的名称密码确认密码2、公钥导入到系统中cat/roo......
  • 学习IDA权威指南-加载器-处理器模块
    有时候,分析一个二进制文件,会发现IDA自带的加载器全部失效了可执行文件选择二进制文件未知文件分析需要了解文档IDA加载器模块IDA处理器模块1-python字节码跟java类似,可以将源代码编译为字节码,然后交于虚拟机执行2-python解释器3-使用SDK编写处理器模块有以下几个步骤1-processor-t......
  • 16收16发ARINC429模块
    6通道发送,16通道接收* 发送通道:每路发送通道FIFO大小为:511x32bit(CHR32216/32316),缓存256条发送消息(CHR32216-EX/32316-EX)发送FIFO可设置复位可设置消息间隔,字间隔和发送帧的预定数呈发送波特率100Kbps、50Kbps、48Kbps、12.5Kbps、10Kbps可设置标准ARINC429字格式转换与......
  • 在 Spring Security 中实现基于 OAuth 2.0 的身份验证与授权
    SpringSecurity是SpringFramework的一个强大模块,用于处理应用程序的安全性需求。其中,OAuth2.0是一种流行的身份验证和授权协议,用于保护Web和移动应用程序的资源。本篇博客将深入探讨如何在SpringSecurity中实现基于OAuth2.0的身份验证与授权,包括配置OAuth2.0提供......
  • 堆排序(内置模块 heapq )(NB)
    博客地址:https://www.cnblogs.com/zylyehuo/#_*_coding:utf-8_*_importheapq#q->queue优先队列importrandomli=list(range(10))random.shuffle(li)print(li)heapq.heapify(li)#建堆(小根堆)n=len(li)foriinrange(n):print(heapq.heappop(li),......
  • Max_Pool模块完善
    Max_Pool模块完善什么是最大池化层(MaxPoolingLayer)?-最大池化层是一种常用的池化层(PoolingLayer),它的作用是对输入的特征图(FeatureMap)进行降维压缩,以加快运算速度,减少参数数量,防止过拟合,提高模型的尺度不变性和旋转不变性。-最大池化层的原理是:在前向传播过程中,对每个特......
  • 硬件管理平台-硬件网关-插件模块-集成(上)
    硬件管理平台-硬件网关-插件模块-集成(上)本章内容本章主要是将插件项目(HardwareGatewayPlugin)集成到HardwareGatewayWebApi项目中。操作创建单例模式类由于HardwareGatewayWebApi项目是WebApi项目,可能后续还会有其他controller加入进来,因此我们的插件模块只针对HardwareGatewa......
  • MT6833天玑700平台_联发科MTK5G安卓核心板智能通讯模块
    联发科MT6833(天玑700)安卓核心板采用八核CPU,包含两颗主频高达2.2GHz的ArmCortex-A76「大」核心,提供更高的效能,带来更畅快的使用体验。高性能LPDDR4X内存频率高达2133MHz,及更快数据传输的UFS2.2,无论是看视频、玩游戏、拍照片、即时聊天或是在线办公都能享有非凡的体验。天玑700采用7......
  • Python模块学习:subprocess模块详解
    一.subprocess模块subprocess是Python2.4中新增的一个模块,它允许你生成新的进程,连接到它们的input/output/error管道,并获取它们的返回(状态)码。这个模块的目的在于替换几个旧的模块和方法,如:os.systemos.spawn*1.subprocess模块中的常用函数函数描述subprocess.ru......
  • Spring:登录功能如何做
    前言今天是2023年8月12号,周六,今天不用上班,只是前几天得知消息我前项目组的同事们被裁员,说不定哪个明天就轮到我了吧,所以今天过来公司,研究下公司项目架构,离职的时候带点东西也不算亏说回登录,我还未工作前,行内人一直告诉我登录功能很简单应届生应该都应该会,可工作两年的我发现,登录......