auth认证模块


目录
  • auth认证模块简介
    • django提供给快速完成用户相关功能的模块
    • django配套提供了一张用户表
    • django自带的admin后台管理用户登录使用auth_user表
    • 创建admin后台管理员用户:
  • auth模块方法大全
    • 导入auth模块的方法
    • 一、验证用户名和密码是否正确
    • 二、保存用户登录状态
    • 三、获取当前用户对象
    • 四、判断当前用户是否登录
    • 五、校验登录装饰器
      • 需导入模块
      • 局部配置
      • 全局配置
    • 六、修改密码
    • 七、注销登录
    • 八、注册用户
      • 需导入模块
      • 创建超级用户
      • 创建普通用户
  • auth扩展表字段

auth认证模块简介

django提供给快速完成用户相关功能的模块

用户相关功能:创建、认证、编辑、拉黑、删除

django配套提供了一张用户表

执行数据库迁移命令之后默认产生的auth_user

django自带的admin后台管理用户登录使用auth_user表

也可以修改配置文件自定义表格

创建admin后台管理员用户:

(1)python3 manage.py createsuperuser
(2)导航栏run点击manage.py task然后根据提示输入createsuperuser
提示:自动对密码进行加密处理并保存

auth模块方法大全

导入auth模块的方法

from django.contrib import auth

一、验证用户名和密码是否正确

关键字:auth.authenticate(username=username, password=password)

class MyLogin(views.View):
    def post(self, request):
        username = request.POST.get('username')
        password = request.POST.get('password')
        user_obj = auth.authenticate(username=username, password=password)  # 验证用户名和密码是否正确
        print(user_obj)
        if user_obj:
            path = request.GET.get('next')
            print(path)
            if path:
                res = redirect(path)
                auth.login(request, user=user_obj)
                return res
            else:
                res = redirect('/home/')
                auth.login(request, user=user_obj)
                return res
        return HttpResponse('


用户不存在或者密码错误

') def get(self, request): return render(request, 'login.html') @method_decorator(csrf_exempt, name='post') # 有效 def dispatch(self, request, *args, **kwargs): return super(MyLogin, self).dispatch(request, *args, **kwargs)

二、保存用户登录状态

关键字:auth.login(request, user=user_obj)

class MyLogin(views.View):
    def post(self, request):
        username = request.POST.get('username')
        password = request.POST.get('password')
        user_obj = auth.authenticate(username=username, password=password)
        print(user_obj)
        if user_obj:
            path = request.GET.get('next')
            print(path)
            if path:
                res = redirect(path)
                auth.login(request, user=user_obj)  # 保存用户登录状态
                return res
            else:
                res = redirect('/home/')
                auth.login(request, user=user_obj)  # 保存用户登录状态
                return res
        return HttpResponse('


用户不存在或者密码错误

') def get(self, request): return render(request, 'login.html') @method_decorator(csrf_exempt, name='post') # 有效 def dispatch(self, request, *args, **kwargs): return super(MyLogin, self).dispatch(request, *args, **kwargs)

三、获取当前用户对象

关键字:request.user

@login_required(login_url='/mylogin/')
def music(request):
    res = request.user  # 获取当前用户对象
    print(res)
    return HttpResponse('


欢迎来到听音乐界面

' '

返回主界面

')

四、判断当前用户是否登录

关键字:request.user.is_authenticated()

@login_required(login_url='/mylogin/')
def video(request):
    is_register = request.user.is_authenticated()  # 判断当前用户是否登录
    print(is_register)
    return HttpResponse('


欢迎来到看视频界面

' '

返回主界面

')

五、校验登录装饰器

需导入模块

from django.contrib.auth.decorators import login_required

局部配置

@login_required(login_url='/mylogin/')  # 局部配置
def music(request):
    res = request.user
    print(res)
    return HttpResponse('


欢迎来到听音乐界面

' '

返回主界面

')

全局配置

LOGIN_URL = '/mylogin/'  # 需要在配置文件中添加配置
@login_required
def music(request):
    res = request.user
    print(res)
    return HttpResponse('


欢迎来到听音乐界面

' '

返回主界面

') @login_required def video(request): is_register = request.user.is_authenticated() print(is_register) return HttpResponse('


欢迎来到看视频界面

' '

返回主界面

')

六、修改密码

关键字:

request.user.check_password() 
request.user.set_password()
request.user.save()
@login_required
def edit_password(request):
    if request.method == 'POST':
        old_password = request.POST.get('old_password')
        new_password = request.POST.get('new_password')
        confirm_new_password = request.POST.get('confirm_new_password')
        is_old_password = request.user.check_password(old_password)
        if not new_password == confirm_new_password:
            return HttpResponse('


两次密码不一致

' '

返回主界面

') if is_old_password: request.user.set_password(new_password) return HttpResponse('


密码修改成功

' '

返回主界面

') return HttpResponse('


原密码密码

' '

返回主界面

') return render(request, 'edit_password.html')

七、注销登录

关键字:

@login_required
def logout(request):
    auth.logout(request)
    return HttpResponse('


退出登陆成功

' '

返回主界面

')

八、注册用户

需导入模块

from django.contrib.auth.models import User

创建超级用户

User.objects.create_superuser()

创建普通用户

class MyRegister(views.View):
    def post(self,request):
        username = request.POST.get('username')
        password = request.POST.get('password')
        is_user = models.MyCustomizeUser.objects.filter(username=username).first()
        print(is_user)
        if is_user:
            return HttpResponse('


用户名已经存在

' '

返回主界面

') models.MyCustomizeUser.objects.create_user(username=username, password=password) return HttpResponse('


注册成功

' '

返回主界面

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

auth扩展表字段

from django.contrib.auth.models import AbstractUser


class MyCustomizeUser(AbstractUser):
    # 不能AbstractUser类中已有的字段
    phone = models.BigIntegerField(null=True)
    gender = models.CharField(max_length=32, null=True)
    addr = models.CharField(max_length=32, null=True)
# 配置文件中添加
AUTH_USER_MODEL = 'app01.Users'