zoukankan      html  css  js  c++  java
  • Django 用户认证组件

    用户认证组件

    组件功能,用session记录登陆验证状态,模块都封装在auth模块里

    导包: from django.contrib import auth

    这个组件也能让会话跟踪更严谨,

    A用户登录后再用同一个客户端登录B用户,session在数据库的记录会被新建且覆盖之前的session,从始至终只有1条数据库记录 而A用户登完,再用A用户账号密码登陆,原始的session在数据库的记录不会发生变化.

    前提: 数据库为auth-user表,创建超级用户 python manage.py createsuperuser

    API

    1.1 authenticate(username=,password=),进行用户名和密码认证

    ​ 当我们试图登陆一个从数据库中直接取出来不经过authenticate()的User对象会报错的

    ​ 如果验证成功,返回user对象,失败返回None

    1.2 login(request,user) login模块就是把用户的状态保存到session中去的
    参数2是前一个authenticate认证成功返回的user对象,这个对象会赋值给request.user
    也就是request.user =user, 这里request.user如果认证成功则是登陆的用户对象,如果未认证,则是一个匿名用户对象,匿名用户只有username字段可以输出调用

    匿名用户还有下面其他几个属性可以用

    id 永远为None

    username 永远为空字符串

    get_username() 永远返回空字符串

    is_staff和is_superuser 永远为false

    is_active 永远为false

    groups 和user_permission 永远为空

    is_annoymous() 返回True

    is_authenticated 返回False

    set_password(),check_password(),save()和delete()会引发NotImplementError

    1.3 logout()

    auth.logout(request)
    这一句等于执行了request.session.flush()
    该函数接受一个HttpRequest对象,无返回值。当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。

    User对象

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

    User对应的就是数据库的auth_user表

    2.1 user对象的 is_authenticated

    方法1:

    def my_view(request):
      if not request.user.is_authenticated():
        return redirect('%s?next=%s' % (settings.LOGIN_URL, request.path))
    

    方法2:

    django已经为我们设计好了一个用于此种情况的装饰器:login_requierd()

    在setting.py要设置login_url,设置登陆页面,一旦装饰器认证失败返回这个登陆页面

    from django.contrib.auth.decorators import login_required
    
    @login_required
    def my_view(request):
      ...
    

    2.2 创建用户

    使用 create_user 辅助函数创建用户:

    from django.contrib.auth.models import User
    user ``=` `User.objects.create_user(username="",password="",email="")
    

    自己直接调用User.objects.create,也可以只不过这样存储的账号密码是明文,而django自带的创建的是密文

    2.3 check_password(passwd)

    用户修改密码的时候,让他先输入原来的密码,如果输入正确返回true

    2.4修改密码

    使用set_password()来修改密码

    user =User.objects.get(username="")
    user.set_password(password="")
    user.save 
    
  • 相关阅读:
    Windows下安装redis
    flask-redirect
    MySQLHelper
    配置信息
    注释习惯
    SQL2012 附加数据库提示5120错误解决方法
    Union-SQL Server学习笔记
    存储过程
    模糊查询&&日期时间操作
    数据库表的设计
  • 原文地址:https://www.cnblogs.com/Young-shi/p/15352684.html
Copyright © 2011-2022 走看看