zoukankan      html  css  js  c++  java
  • Django auth模块

    auth模块

    一.Auth模块是什么

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

    我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。

    Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点。它内置了强大的用户认证系统--auth,它默认使用 auth_user 表来存储用户数据。

    执行数据库迁移命令之后,会生成很多表,其中的auth_user是一张用户相关的表格

    其他补充:

    # createsuperuser  创建超级用户
    这个超级用户就可以拥有登陆django admin后台管理的权限

    二.Auth模块的使用

    from django.contrib import auth

    <1> authenticate() 验证方法

    1.提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username 、password两个关键字参数。(会将password参数转为密文与auth_user表中的密码校验)
    2.如果认证成功(用户名和密码正确有效),便会返回一个 User 对象,若不成功返回None
    user_obj = auth.authenticate(username=username,password=password)
    # 必须要用auth.authenticate 因为数据库中的密码字段是密文的 而你获取的用户输入的是明文
    print(user_obj)  #  返回的就是用户对象
    print(user_obj.username)  # 用户名
    print(user_obj.password)  # 密文密码

    <2> login() 登录状态方法

    1.该函数接受一个HttpRequest对象,以及一个经过authenticate认证的User对象。
    2.将用户状态记录到session中,并返回到前端浏览器中
    auth.login(request,user_obj)  # 将用户状态记录到session中
    # 类似 request.session['user'] = user_obj
    """
    只要执行了这一句话,你就可以在前后端任意位置通过request.user获取到当前用户对象
    """

    补充 匿名用户:

    def foo(request):
        print(request.user)  # AnonymousUser 如果没有执行auth.login那么拿到的是匿名用户
        return HttpResponse('foo')

    <3> is_authenticated() 判断是否登录方法

    print(request.user.is_authenticated) # 判断用户是否登录,返回bool值,只有执行了auth.login才为True

    <4> login_required 登录装饰器

    from django.contrib.auth.decorators import  login_required

    (1)局部配置

    @login_required(login_url='/login/')  # login_url参数 从定向到login页面(若用户没有登录测重定向到 /login/ )
    def func(request):
        return HttpResponse('func')

    (2)全局配置

    在settings文件中:
    LOGIN_URL = '/login/'  # 若没登录则从定向到login页面
    ​
    @login_required
    def func(request):
        return HttpResponse('func')

    <5> logout() 退出登录方法

    1.该函数接受一个HttpRequest对象,无返回值。
    2.当调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。
    def logout(request):
        auth.logout(request)
        # 类似 request.session.flush()
        return HttpResponse('logout')

    <6> check_password() 查看密码方法

    # 获取用户密码自动加密,去数据库校验当前用户的密码是否一致
    is_right = request.user.check_password(password)  # 返回bool值

    <7> set_password() 修改密码方法

    request.user.set_password(new_password)
    request.user.save()  # 修改密码的一定要save方法保存,否则无效

    <8> create_user() 与 create_superuser()

    auth 提供的一个创建新的普通用户和超级用户的方法,需要提供必要参数(username、password)等。
    from django.contrib.auth.models import User
    User.objects.create_user(username='用户名',password='密码',email='邮箱',...)
    User.objects.create_superuser(username='用户名',password='密码',email='邮箱',...)

     

    补充:

    扩展默认的auth_user表(自定义auth_user表)

    from django.contrib.auth.models import AbstractUser

    <第一步> 在models.py文件中创建自定义表

    from django.contrib.auth.models import  AbstractUser
    ​
    # 扩展anth_user表的方法 使用类的继承
    class Userinfo(AbstractUser):
        # 新增加的字段不要和原来的auth_user表中的字段冲突
        phone = models.BigIntegerField()
        avatar = models.CharField(max_length=32)

    <第二步> 在settings.py文件中

    # 告诉django  orm不再使用auth默认的表  而是使用你自定义的表
    AUTH_USER_MODEL = 'app01.Userinfo'  # '应用名.类名'

    <第三步> 配置MySQL数据库, 执行数据库迁移命令

    补充:执行数据库迁移命令后 所有的auth模块功能 全部都基于你创建的表 而不再使用auth_user

     

  • 相关阅读:
    C#中的多态
    一个JQUERY文件
    等比例缩放图片
    WIN7 环境下 VS2012 打开某些解决方案项目 提示 【已停止工作】 解决办法
    统计字符串中字符出现的次数
    LINQ关联表查询语法和.NET扩展方法和JSON.NET时间格式化代码段
    EasyUI表格datagrid合并行单元格
    一个导出Excel的类
    一个缩略图的类
    分布式缓存MemCache
  • 原文地址:https://www.cnblogs.com/waller/p/11588068.html
Copyright © 2011-2022 走看看