Django | 高级之 Auth模块

Auth模块是什么

Auth模块式是jango自带的用户认证码模块

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

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

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

python3.10 manage.py createsuperuser

zhangjiejia@zhangjiejiasMBP Atyuki % python3.10 manage.py createsuperuser
Username (leave blank to use 'zhangjiejia'): JJ
Email address: Jeazhang828@sina.com
Password: 
Password (again): 
Superuser created successfully.


在auth_user表里面is_superuser是1就是超级用户,0就是普通用户

Auth模块常用方法

Auth模块的登录功能

from django.contrib import auth  
# Auth模块的登录功能  
def auth_login(request):  
  
    if request.method == 'POST':  
        # 接收前端传过来的数据  
        username = request.POST.get('username')  
        password = request.POST.get('password')  

        # 验证用户名和密码是否正确  
        # 1. 去哪个表中核验  
        # 2. 要哪个字段来比较  

        '''  
        这里的登录我们使用Auth模块,登录的时候我们使用的表是auth_user这张表  
        '''  

        # 查看了源码后,发现后面是**打散,所以我们用关键字参数传参  
        user_obj = auth.authenticate(request, username=username, password=password)  
        print(user_obj) # 打印出来后是 用户名。 这个就是用户登录成功之后的用户对象  
        print(user_obj.username)  
        print(user_obj.password)  

        '''  
        注意事项:  
        传递参数的时候,用户名和密码必须同时传入。  
        '''  

        # 如果登录成功  
        if user_obj:  
        # 保存用户登录的状态, 这里切记既然已经使用了auth模块就继续使用auth模块不要再自己创建方法了  
        auth.login(request, user_obj)  

        # 而且只要写了auth.login,那么就可以在全局任何有request对象的地方通过request.user拿到用户的对象  

        return redirect(request, '/home/')  
    return render(request, 'auth/auth_login.html')

Auth模块的登录验证功能

# Auth模块的验证登录功能  
@login_required(login_url='/auth_login/')  
def auth_check(request):  
    print(request.user.is_authenticated)  

    if request.user.is_authenticated:  
        # 处理登录后的逻辑  
        pass  
    else:  
        print('check')  
        # 没有登录,跳转登录界面  
        redirect('/auth_login/')  
  
    return HttpResponse("LOGGINED")

Auth模块的退出登录登录

# 退出登录功能  
def logout(request):  
    # 清除cookie或者session  
    # 因为源码中需要用到request,所以request必须传  
    auth.logout(request)  
    return redirect('/home/')

Auth模块的修改密码功能

# Auth更改密码的功能  
def set_password(request):  
  
    if request.method == 'POST':  
        print('check1')  
        old_pswd = request.POST.get('old_password')  
        new_pswd = request.POST.get('new_password')  
        aga_pswd = request.POST.get('aga_password')  

        # 先验证两次密码是否输入一直  
        if new_pswd == aga_pswd:  
            print('check2')  
            # 验证老密码是否正确,否则不让修改  
            is_right = request.user.check_password(old_pswd)  

            if is_right:  
            print('check3')  
            # 修改密码  
            request.user.set_password(new_pswd)  
            request.user.save()  
            return redirect('/login/')  
    return render(request, 'Auth/set_password.html')

Auth模块注册功能

from django.contrib.auth.models import User  
def register(request):  
    if request.method == 'POST':  
        username = request.POST.get('username')  
        password_raw = request.POST.get('password_raw')  
        password_check = request.POST.get('password_check')  

        if password_raw == password_check:  
            User.objects.create_user(username=username, password=password_raw)  
            return redirect('/login/')  
  
return render(request, 'auth/register.html')

Auth模块的扩展

默认情况下使用的就是Auth_user的默认字段,但是我们也可以扩展自己的字段

前提是:所有的模型类都能继承,扩展之后需要再配置文件中加一句话 在扩展表之前数据库不能迁移,扩展这个表需要再迁移数据库之前。

如果迁移了后,还想扩展怎么办?

1. 换库
2. 需要删除很多个应用的migrations文件夹,auth_migration表里面的迁移记录也需要删除

所以在扩展表之前要想好都需要什么字段

---------------------------END---------------------------

题外话

在这里插入图片描述

感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img

二、Python兼职渠道推荐*

学的同时助你创收,每天花1-2小时兼职,轻松稿定生活费.
在这里插入图片描述

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

img

👉CSDN大礼包🎁:全网最全《Python学习资料》免费赠送🆓!(安全链接,放心点击)

若有侵权,请联系删除

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值