• 用户认证模块auth


    其实auth模块本意上也是设置session

    用户认证是在你的django中执行了orm的数据库的迁移和生成后就会在你的数据库中自动生成一个用户认证的表 这个表存储的是你auth要提取的信息

    首先views中导入下面语句
    from django.contrib import auth
    django.contrib.auth中提供了许多方法,这里主要介绍其中的三个:

    其实你的用户验证的组件会调用你的django中user表 然后对这个表中你要先存数据
    from django.contrib.auth.models import User  #导入你的dgango中的user表
    def adduser(request):
        User.objects.create_user(username = 'laoliu',password=123456)  #运用create_user创建密文密码
        return redirect('/login/')

    先导入数据库  然后运用create_user进行创建  如果直接使用create创建的是明文密码

    如果你的表想用user内的字段 或者很多字段相同   你的表也可以继承auth模块你的models内继承了user表 

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

    但是你在models内设置好了后你要取settings内设置一段话告诉django你继承了这个表中

    settings:

    AUTH_USER_MODEL="你的app名.UserInfo"

    就是告诉你的django你的app中的models内这个表要继承User表

    AUTH_USER_MODEL="once.UserInfo"
    告诉django你的once内的models内的UserInfo表要继承

    models:

    from django.contrib.auth.models import AbstractUser   
    
    from django.contrib.auth.models import User  /这个和上面的继承哪一个都可以User也是继承了AbstaactUser表
    
    
    
    class UserInfo(AbstractUser):
        """
        用户信息
        """
        ....

    views:

    from django.contrib import auth  #导入auth模块
    def login(request):
        '''
        登陆
        :param request:
        :return:
        '''
        if request.method == 'POST':
            user = request.POST.get('user')
            pwd = request.POST.get('pwd')
            user = auth.authenticate(username =user,password=pwd)  #自动给你的user表自动校验
            if user: #登陆成功
                auth.login(request,user)  #相当于设置session
                
    
    
        return render(request,'login.html')

    auth.authenticate:

    自动判断模块  可以判断你提交的信息是不是和user表中的内容是否相同

    autho.login() 这一步相当于设置session的值

    auth.login(request,user)   设置session的值user

    设置完成后request.user就是全局的变量了直接可以随意随时随地的使用request.user进行取值

    is_authenticated  是来判断你的设置的内容是否有值的

    if not request.user.is_authenticated:  #相当于如果没有设置session的值 从request.user中没有取到值

    你的auth.login(request,'设置的内容')

    然后你就可以根据你设置的内容全局去取

    auth.login(request,user)
    
    request.user就可以全局去取整个django都可以取到

    注销:

    autho.logout(request)  

    注销就相当于session.flush()

    views:

    from django.shortcuts import render,redirect,HttpResponse,reverse
    
    # Create your views here.
    
    
    from django.contrib import auth
    
    
    
    def login(request):
        if request.method == 'POST':
            user = request.POST.get('user')
            pwd = request.POST.get('pwd')
    
    
            # 上面获取到用户名之后会自动的用auth.authenticate来进行验证
            # user = auth.authenticate(uaername = user)
            user = auth.authenticate(username = user,password = pwd)
            if user:
                auth.login(request,user)  #auth.login返回的是一个全局的变量 这一步就是一个设置session的值
                return redirect('/index/')
        return render(request,'login.html')
    
    
    
    
    def index(request):
        if not request.user.is_authenticated:  #相当于如果没有设置session的值 从request.user中没有取到值
            return redirect(reverse('/login/'))
        return render(request,'index.html')
    
    
    
    
    def logout(request):
    
        auth.logout()  #这一步就相当于直接session.flush()
        return redirect('/login/')
    
    
    from django.contrib.auth.models import User  #导入你的dgango中的user表
    def adduser(request):
        User.objects.create_user(username = 'laoliu',password=123456)  #运用create_user创建密文密码
        return redirect('/login/')

    实现一个简单的用户登陆注销:

  • 相关阅读:
    【codeforces 787B】Not Afraid
    【codeforces 787A】The Monster
    【codeforces 787C】Berzerk
    【t046】牛跳
    【BZOJ 1033】 [ZJOI2008]杀蚂蚁antbuster(判断线段是否和圆相交)
    Java Web整合开发(81)
    用户、权限管理
    链表
    T1230 元素查找 codevs
    T3139 栈练习3 codevs
  • 原文地址:https://www.cnblogs.com/cjj-zyj/p/9968063.html
Copyright © 2020-2023  润新知