zoukankan      html  css  js  c++  java
  • auth组件

    AUTH模块

    django自带的用户认证模块

    主要功能,用户信息管理,用户注册, 登录.注销,修改密码信息等,默认使用自定义的auth_user存储用户信息,用auth_session保存用户登录状态.

    扩展默认的auth_user表

    更改默认的auth_user表,完成自定一字段

    方法一

    利用一对一关联一张表

    class UserDetail(models.Model):
    	 phone = models.BigIntegerField()
    	 user = models.OneToOneField(to='User')
    
    方法二

    使用继承关系

    从导入d.c.a.m导入au

    提前要去settings配置文件中添加配置信息,

    AUTH_USER_MODEL = "app名.表名"

    AUTH_USER_MODEL = "app01.UserInfo"

    from django.contrib .auth .models import AbstractUser
    
    class UserInfo(AbstractUser):
        phone = models.BigIntegerField()
        gender = models.CharField(max_length=32)
    

    一旦提交了新的表设计,后续对表的操作就要使用我们自己新建的表名,而原来自动创建的auth-user表就已经不存在了.

    auth模块的常用方法

    1. 创建用户

      如果使用默认表,需要提前导入表

      from django.contrib.auth.models import User

      #导入自己自定义创建的表
      from app01.models import UserInfo
      def register(request):
          if request.method =="POST":
              username = request.POST.get("username")
              password = request.POST.get("password")
              #以明文存储密码
              UserInfo.objects.create(username=username,password=password) 
              #创建普通用户,密码自动加密
              UserInfo.objects.create_user(username=username,password=password)
              #创建超级用户,需要写入至少用户名,密码,邮箱
              UserInfo.objects.create_superuser(username=username,password=password)
      
    2. 校验用户名与密码是否匹配
      from django.contrib import auth
      def check_user(request):
          if request.method =="POST":
              username = request.POST.get("username")
              password = request.POST.get("password")
              user_obj = auth.authenticate(request,username=username,password=password)
      

      auth.authenticate()方法,返回user对象,括号中必须传入用户名和密码,

      会自动加密密码并去数据库中比对.

      user_obj.password返回的是密码的密文.

    3. 保存用户登录状态

      将用户的登陆状态保存到auth_session中

      res = auth.authenticate(request,username=username,password=password)
      auth.login(request,res)
      

      auth.login(request,res)执行之后,就可以在任何可以拿到request的地方,通过request.user获取当前登录的用户对象,

      如果没有登录,调用request.user返回一个AnonymousUser对象,表示匿名用户.

    4. 判断当前用户是否登录
      request.user.is_authenticated()
      

      返回bool值

    5. 校验用户是否登录装饰器

      from dcad import lr

      from django.contrib.auth.decorators import login_required
      #局部配置
      @login_required(login_url='/login/')
      def index(request):
          pass
      #全局配置
      #settings配置文件中 直接配置
      LOGIN_URL = '/login/'
      @login_required
      	def index(request):
      		pass
      
      

      如果全局和局部都配置了,优先以局部为准

    6. 判断密码是否正确
      res = request.user.check_password(password)
      

      返回bool值

    7. 修改密码
      request.user.set_password(new_password)
      request.user.save()
      

      切记保存语句一定要执行

    8. 注销
      auth.logout(request)
      
  • 相关阅读:
    TongJI Online Judge预赛(3): Game
    堆栈小应用:配对
    在.net中使用Udp协议创建简单的聊天程序
    TongJI Online Judge预赛(2): LOVE LETTER
    全排列问题之递归求解
    如何打造RSS阅读器
    Html 常用标志总结
    实现页面的分帧显示
    每天OnlineJudge之 “数素数”
    文本编辑器中,如何设计 撤销/重复栈
  • 原文地址:https://www.cnblogs.com/agsol/p/11992078.html
Copyright © 2011-2022 走看看