zoukankan      html  css  js  c++  java
  • Django之Auth模块 实现登录,退出,自带session 与认证功能的一个重要的模块

    Auth模板

    1. 什么是Auth模块,有什么用?

    django的auth的模块的使用: auth 是集合注册,登录,注销,session 多个功能集合在一起的模块

    2. 使用Auth组件的默认auth_user表常用操作

    from django.contrib.auth.models import User
    # 1、创建普通用户
    User.objects.create_user(username='Owen', password='123')
    
    # 2、创建超级用户
    User.objects.create_superuser(username='root', password='root', email='root@root.com')
    
    # 3、获取第一个用户
    user = User.objects.first()
    
    # 4、修改密码
    user.set_password('000')
    user.save()
    
    # 5、校验密码
    res = user.check_password('000')
    Auth组件默认auth_user表常用操作

    3. auth 组件的常用功能:

    # 1、校验用户账号及密码,校验成功返回user对象
    from django.contrib.auth import authenticate
    user = authenticate(username=usr, password=pwd)
    
    # 2、注册用户到request对象中,注册成功可以request.user访问当前登录用户(会形成session记录)
    from django.contrib.auth import login
    login(request, user)  # 注册authenticate成功(当前登录)的用户
    
    # 3、注销当前注册的user (用户注销)
    from django.contrib.auth import logout
    logout(request)
    Auth组件常用功能
    例题: 检验第一个用户的密码
    user = User.objects.first()
    res = user.check_password('000')
    # 检验的结果是布尔值, True 或者是False
    
    2. django 的检验用户的账号与密码是否正确的模块:
    from django.contrib.auth import authenticate
    user = authenticate(username=usr, password=pwd)
    #校验用户账号及密码,校验成功返回user对象
    
    3. django 的检验用户成功后的登录模块, 登录之后直接添加session的功能
    from django.contrib.auth import login
    login(request, user)  # 注册authenticate成功(当前登录)的用户
    #注册用户到request对象中,注册成功可以request.user访问当前登录用户(会形成session记录)
    
    4. django 模块中的注销用户,用户注销 用户可以直接退出了,session会消失
    from django.contrib.auth import logout
    logout(request)
    
    5. django 模块的检验用户是否登录的方法
    
    # 视图函数中使用
    if request.user.is_authenticated(): pass
    # 模板语言中使用
    {% if request.user.is_authenticated %}
    {% else %}
    {% endif %}

    4. auth模块之检验用户是否登录,可以做装饰器用

    from django.contrib.auth.decorators import login_required
    @login_required(login_url='/user_login/')
    def user_home(request):
        return render(request, 'user.html', locals())
    # 注意他返回的是/user_login/?next=/user_order/ 所以前面拿到的是'next'的key  就可以拿到返回值/user_order/

    5. auth模块之给user_auth表添加额外的字段

    6. 当发现auth模块的User表的信息太少,想自己添加信息的话:
    
    # 在models.py 内
    from django.contrib.auth.models import AbstractUser
    
    
    class User(AbstractUser):
        # 增加自定义字段
        info = models.TextField(null=True)
        phone = models.TextField(null=True)
    
    
    # settings.py配置
    AUTH_USER_MODEL = 'app.User'
    
    # 下次在调用User表的话 就使用 from app.models import User

    6. 通过auth组件实现前端实现用户登录跳出不同的页面的功能

    7. 如何在前端显示 这个是谁的主页信息
    <body>
    <h1>{{ request.user.username }}的个人订单</h1>
    </body>
    # request.user 是拿到当前登录的对象,
    # .username 是拿到当前对象的名字来显示 谁谁谁的的个人订单
    
    8. 如何实现用户登录了就显示 个人主页与注销  没登录就显示 登录与注册
    # 在前端写:
    <p>
    {% if request.user.is_authenticated %}      #判断用户是否登录成功
        <a href="/user_home/">{{ request.user.username }}</a>   #如果登录成功显示 用户的名字
        |
        <a href="/user_logout/">注销</a>      # 和注销
    {% else %}
        <a href="/user_login/">登录</a>       #如果用户没登录, 显示登录
        |
        <a href="/user_register/">注册</a>    # 和注册
    {% endif %}
    </p>
    如何在前端显示 这个是谁的主页信息

    简单的使用Auth组件完成用户的注册登录与判断验证+session的功能简单实现

    from django.shortcuts import render, HttpResponse, redirect
    # from django.contrib.auth.models import User
    from app.models import User
    from django.contrib.auth import authenticate, login, logout
    from django.contrib.auth.decorators import login_required
    from django.db.utils import IntegrityError
    
    
    def index(request):
        return render(request, 'index.html', locals())
    
    
    def user_login(request):
        if request.method == "GET":
            return render(request, 'login.html')
        if request.method == "POST":
            # 在请求url中通过next取出回跳的页面路径
            back_url = request.GET.get('next', '/')
            usr = request.POST.get('usr', None)
            pwd = request.POST.get('pwd', None)
            # 用前台传入的账户密码作登录校验
            user = authenticate(username=usr, password=pwd)  # type: User
            if user:
                # 在session中记录登录状态 => login(request, user)来记录登录状态
                # request.session['usr'] = user.username
                # request.session['is_login'] = True
                login(request, user)
    
            return redirect(back_url)
    
    
    def user_logout(request):
        logout(request)
        return redirect('/')
    
    
    def user_register(request):
        if request.method == "GET":
            return render(request, 'register.html')
        if request.method == "POST":
            usr = request.POST.get('usr', None)
            pwd = request.POST.get('pwd', None)
            try:
                User.objects.create_user(username=usr, password=pwd)
            except IntegrityError as e:
                print('注册失败:%s' % e)
            return redirect('/')
    
    
    # 装饰器的页面返回key是next:/user_login/?next=/user_order/
    @login_required(login_url='/user_login/')
    def user_order(request):
        return render(request, 'order.html', locals())
    
    
    @login_required(login_url='/user_login/')
    def user_home(request):
        return render(request, 'user.html', locals())
    课件案例简单实现
  • 相关阅读:
    Java String 乱码
    HBase非原理性浅析
    git cherry-pick
    数据结构之队列
    数据结构之栈
    算法之简单排序
    数据结构之数组
    数据结构简介
    Java类型信息
    基数排序
  • 原文地址:https://www.cnblogs.com/gukai/p/10775333.html
Copyright © 2011-2022 走看看