Django内置user表上扩展字段,auth组件登陆校验,Auth组件登陆认证装饰器

Auth 组件 [ 登录认证 ]

Django为开发者提供了一套可以完成用户注册、登录、登录校验、登录信息保存、密码的密文存储等一系列功能的模块

auth_user 表(django内置的user表)

from django.contrib.auth.models import User

# 创建用户:
  User.objects.create_user(username="lxx",password="123")     # 创建普通用户
  User.objects.create_superuser(username="lxx",password="123",email=false)  # 创建超级用户

# 修改密码:(django自己对密码进行了加密)
  user = User.objects,first()
  user.set_password("000")
  user.save

# 校验密码:
  user = User.objects.first()
  user.check_password("000")   # django自己去数据库校验

在django内置的user表上扩展功能,扩展完以后用自己的User表

# 方法一:写一个表跟django内置的表一对一(一般不用)
eg:
    class user(model.Models):
        id = models.AutoField(primary_key=True)
        username = models.OneToOneField(to=User,to_field="username",null=True,)
        info = models.TextField()

# 方法二:写一个表继承 AbstractUser 类(推荐)
from django.contrib.auth.models import AbstractUser
class user( AbstractUser ):  # 原有的表里有的属性,我现在都有
  info = models.TextField(null=True)

# settings.py配置 AUTH_USER_MODEL = 'app.User'

Auth组件登陆校验

from django.contrib.auth.models import User
from django.contrib import auth
# 校验字段用户名,密码,返回user对象   
  user_obj = auth.authenticate(username="lxx",password="123"),存入浏览器Cookie, # 登陆用户
  auth.login(request,user_obj) # 保存登陆状态,生成随机字符串,写入session # 注销用户
  auth.logout(request)
# 检验是否是登陆状态:
  登陆完以后django自己把user表对象封装到 request 里面 去查django内置的User表里的字段
  request.user.is_authenticated() # 查看是否是登陆状态

Auth组件登陆认证装饰器

from django.contrib.auth.decorators import login_required
# 装饰器的页面返回的 key是next:
  /user_login/?next=/user_order/ # 默认的
# redirect_field_name="return_url"修改装饰器的 key值,
  /user_login/?return_url=/user_order/ # 修改完以后的
@login_required(login_url='/user_login/' ,redirect_field_name="return_url") # 登陆认证 login_url='/user_login/' 表示未登陆走向的路由
def user_home(request):
  return render(request,'user.html',locals())
posted @ 2018-12-03 15:03  星牧  阅读(458)  评论(0编辑  收藏  举报