zoukankan      html  css  js  c++  java
  • Auth认证组件

    Auth认证组件

    Auth模块是什么

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

    • 内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据

    • 提供了对auth_user表的注册、登陆、认证、注销、修改密码等功能


    auth模块常用方法

    from django.contrib import auth
    from django.contrib.auth.models import User
    

    1 创建用户

    User.objects.create()  # 密码是明文
    User.objects.createuser()  # 基本都用它 
    User.objects.createsuperuser()  # 邮箱要给数据
    
    # views
    def reg(request):
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')
            User.objects.create_superuser(username=username,password=password,email='123@qq.com')
        return render(request, 'reg.html')
    

    2 校验用户名和密码是否正确

    auth.authenticate(username=username,password=password)  # 用户名和密码两个一个都不能少
    
    # views
    def login(request):
        if request.method == 'POST':
            username = request.POST.get('username')
            password = request.POST.get('password')
            user_obj = auth.authenticate(request, username=username, password=password)
            # 用户名密码正确返回的是用户对象
            # 错误返回None
            if user_obj:
                auth.login(request, user_obj)
                # 只要执行了这一句话,之后在任意可以获取到request对象的地方
                # 都可以通过request.user获取到当前登录的用户对象
                return HttpResponse("登陆成功")
        return render(request, 'login.html')
    

    3 保存用户登陆状态

    auth.login(request,user_obj)  # 这一句执行之后 request.user获取当前登录的用户对象
    

    4 如何判断当前用户是否登录,以及如何获取当前登录用户对象

    # views
    def get_user(request):
        print(request.user)  # ka 登录用户对象
        print(request.user.is_authenticated())  # True 判断是否登录
        return HttpResponse('get_user')
    

    5 校验用户是否登录

    局部配置

    # 校验用户是否登录装饰器
    from django.contrib.auth.decorators import login_required
    @login_required(login_url='/login/')
    
    # views
    from django.contrib.auth.decorators import login_required
    @login_required(login_url='/login/')
    def index(request):
        return HttpResponse('index页面')
    

    全局配置

    配置文件中写以下代码
    LOGIN_URL = '/login/'
    @login_required
    def set_password(request)
    

    如果两个都设置了 那么优先执行局部配置

    6 修改密码

    def set_password(request):
        if request.method == 'POST':
            old_password = request.POST.get('old_password')
            new_pwd = request.POST.get('new_password')
            # 先校验旧密码是否正确
            is_right = request.user.check_password(old_password)
            # 再去修改密码
            if is_right:
                request.user.set_password(new_pwd)
                request.user.save()
        return render(request, 'set_password.html')
    

    7 注销功能

    def logout(request):
        auth.logout(request)
        return HttpResponse('注销成功')
    


    扩展auth_user

    1 利用一对一表关系

    2 利用类的继承

    from django.contrib.auth.models import User, AbstractUser
    class Userinfo(AbstractUser):
        phone = models.BigIntegerField()
        mobile = models.CharField(max_length=11, unique=True)
        icon = models.ImageField(upload_to='icon', default='icon/default.png')
        # 扩展字段,尽量不要与原先表中的字段冲突
    

    配置文件

    AUTH_USER_MODEL = '应用名.表名'
    AUTH_USER_MODEL = 'drj_pro.User'
    MEDIA_BOOT = os.path.join(BASE_DIR, 'media')
    MEIDA_URL = '/media/'
    
    

    django就会将新建的表来替换auth_user表

    并且之前auth模块所有的功能不变 参照的也是userinfo表

  • 相关阅读:
    Android 面试题汇总
    Android中Listview展示及其优化好处
    手机APP创建桌面快捷方式
    popupwindow展示
    showSetPwdDialog--自定义对话框
    android 四大组件之---Service
    会话技术( Cookie ,Session)
    Request 和 Response 原理
    Servlet的生命周期+实现方式
    pull解析器: 反序列化与序列化
  • 原文地址:https://www.cnblogs.com/kai-/p/12194727.html
Copyright © 2011-2022 走看看