Django——Auth模块(python)

#前言:

本文主要介绍了关于Django中Auth模块的实现,如若各位大佬发现错误或者需要添加的内容,欢迎各位指正,最后我后续还会继续更新关于Django的一些基本内容,欢迎大家关注。

一、简介:

“Auth”模块是指“authentication(身份验证)”模块,用于验证用户身份和控制用户访问权限。在软件开发中,身份验证是确保用户是其所声称的身份的过程,以及在确认其身份后控制其可以访问的资源和操作。

首先我们要清楚,Auth 用户认证 , 本质上是设置 Session。

Django 认证系统同时处理认证和授权:
    认证:验证一个用户是否为 Django 声明,如果是可以进行登录或者访问
    授权:决定一个已经验证的用户有哪些功能是允许操作。

在 Django 迁移数据库的是时候会自动生成一张用户认证表:auth_user , 存放用户的基本信息(用户名 , 密码 , 邮箱……)证的用户有哪些功能是允许操作。

二、扩建auth_user 表:

在 Django 迁移数据库的是时候会自动生成一张用户认证表:auth_user , 存放用户的基本信息(用户名 , 密码 , 邮箱……)证的用户有哪些功能是允许操作。扩建auth_user 表,实际上就是扩建 auth_user 表中的字段数据。

方式一:
    创建一对一,绑定 auth_user 表(不推荐)。

方式二:继承AbstractUser
在定义模型类的时候继承 AbstractUser 类,进行数据迁移的时候不会生成 auth_user , 原有的 auth_user 中的所有字典就会继承到自定义的模型类中。
实现字段的扩建,直接在自定义模型类中添加额外的新字段即可。

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    # 添加额外的字段
    mobile = models.CharField(max_length=11)

    class Meta:
        db_table = 'UserInfo'

扩建 auth_user 表的前提:
    1、在实现扩建的时候 ,不允许,不能先执行迁移数据库(如果已经迁移过数据库,就换一个新的数据库)。
    2、在扩建中,只能添加字段 , 不能修改或者删除原有字段。

三、重新配置 auth 认证模型类:

在setting.py文件中:

# 配置自定义的认证模型类
# AUTH_USER_MODEL = '应用名称.模型类'
AUTH_USER_MODEL = 'AuthApp.User'

四、操作实现:

关于Auth的操作,我们主要是为了实现当我们用户未曾登录访问网站时,进去主页后有一些操作页面必须是在登录状态才可以实现的。所以若是未登录,要点击这些操作则重定向到指定页面(比如登录页面),若是登录则正常访问。

1、前期准备:

在实现操作前我们先创建几个前端页面(这里就不展示了),分别为register.html 注册页面,login.html 登录页面,index.html 主页面。

2、设置注册视图类:

注意:在我们正常将数据传输给数据库时,我们的数据都是可以看到的,而我们这里用create_user方法将数据加密保存到数据库当中,这是Auth模块的关键

class RegisterView(View):

    def get(self , request):
        return render(request , 'register.html')

    def post(self , request):
        username = request.POST.get("username")
        password = request.POST.get("password")
        email = request.POST.get("email")
        mobile = request.POST.get("mobile")

        '''
        create:保存用户数据,密码不加密
        create_user:密码加密
        '''
        User.objects.create_user(username=username , password=password , email=email , mobile=mobile)

        return redirect('/login/')

3、设置登录视图类:

因为我们上述注册的数据是加密保存到数据库当中的,所以当我们要查这个数据时,就不用常规查找,而是用Auth模块,既authenticate ,它负责加密后认证用户信息,用户存在返回用户数据 , 用户不存在返回 None。

而我们要保存用户登陆状态就用:login方法。

class LoginView(View):
    def get(self , request):
        return render(request , 'login.html')

    def post(self , request):
        username = request.POST.get("username")
        password = request.POST.get("password")

        # authenticate 认证用户信息,用户存在返回用户数据 , 用户不存在返回 None
        user = authenticate(username=username , password=password)

        if not user:
            return render(request , 'login.html' , {'error_message':'用户名或者密码错误'})

        # login 保持用户登录状态
        # 在请求中能够获取到用户信息,说明用户是登录的 , 否则就没有登录
        login(request , user)
        next = request.GET.get('next')
        if next:
            return redirect(next)
        else:
            return redirect('/index/')

4、重定向过程:

注:我的设计意图是在前端页面有两个a标签,一个是购物车(必须在登陆状态才可以进),另外一个是退出。

使用修饰器:

@login_required  用户验证登录的装饰器
使用的时候需要配置局部的重定向 url
@login_required(login_url='/login/')

@login_required(login_url='/login/')
def cart(request):
    return HttpResponse("<h1>购物车页面</h1>")
@login_required(login_url='/login/')
#注销用户信息:
def logoutview(request):
    logout(request)
    return redirect('/login/')

若是不想在装饰器后面添加重定向 url 参数,就可以在setting.py中配置全局:

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

五、总结:


该篇博客介绍了Django的Auth模块及其操作,如若各位大佬发现问题或者需要补充的地方,欢迎指正,后续我还会继续更新关于Django的其它内容,欢迎大家关注我等后续更新,您的关注和点赞将是我变强的最大动力。

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值