首页 > 其他分享 >Django自带Auth模块

Django自带Auth模块

时间:2022-11-27 21:47:32浏览次数:80  
标签:username request Auth Django user 自带 password auth login

Django自带Auth模块

目录

# 创建超级用户
python manage.py createsuperuser
# 使用auth模块,要用就全用


from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
# Create your views here.
def login(request): #登录
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user_obj = auth.authenticate(request,username=username,password=password) # 必须同时传入用户名和密码,返回用户对象或者None
        if user_obj:
            # 保存用户状态
            auth.login(request,user_obj) #类似于request.session[''] = user_obj,执行后就可以使用request.user获取当前登录的用户对象
            return redirect('home')

    return render(request,'login.html')

@login_required(login_url='/login/') # 局部指定登录页面,优先级高于settings.py中的全局配置
def home(request):
    # if request.user.is_authenticated(): # 判断是否登录
    #     return HttpResponse('你登录了,这里是你的主页')
    return HttpResponse('这里是主页')

@login_required
def modify_pwd(request): # 修改密码
    if request.method == 'POST':
        old_password = request.POST.get('old_password')
        new_password = request.POST.get('new_password')
        confirm_password = request.POST.get('confirm_password')
        if new_password == confirm_password:
            is_right = request.user.check_password(old_password) # 自动加密比对数据库
            if is_right:
                request.user.set_password(new_password) #修改对象属性
                request.user.save() # 操作数据库
    return render(request,'modify_pwd.html',locals())

@login_required
def logout(request): # 注销
    auth.logout(request) # 类似request.session.flush()
    return redirect('/login/')


def register(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        # User.objects.create(username=username,password=password) # 会明文存储密码
        User.objects.create_user(username=username,password=password) # 创建普通
        # 创建超级用户create_superuser
    return render(request,'register.html')

auth模块小结

# 比对用户名和密码
user_obj = auth.authenticate(request,username=username,password=password) # 必须同时传入用户名和密码,返回用户对象或者None

# 保存用户状态
auth.login(request,user_obj) #类似于request.session[''] = user_obj,执行后就可以使用request.user获取当前登录的用户对象

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

# 获取当前登录用户
request.user

# 校验用户是否登录装饰器
from django.contrib.auth.decorators import login_required
@login_required(login_url='/login/') # 局部指定登录页面,优先级高于settings.py中的全局配置
# settings.py LOGIN_URL = '/login/' 全局配置

# 修改密码
is_right = request.user.check_password(old_password) # 自动加密比对数据库
request.user.set_password(new_password) #修改对象属性
request.user.save() # 操作数据库

# 注销
auth.logout(request)

# 注册
from django.contrib.auth.models import User
User.objects.create_user(username=username,password=password) # 创建普通用户

拓展auth_user表

class UserInfo(AbstractUser):
    '''
    如果继承了AbstractUser,在执行数据库迁移命令时就不会创建auth_user表,而会在userinfo表中包含所有auth_user表
    的字段,并包含自己拓展的字段
    但是:
    1。需要在数据库设计阶段就明确不适用auth_user表,如果当前库已经创建了auth_user表,则该库不可执行以上继承
    2.继承的类不要覆盖Abstract类中的字段名
    3.需要在配置文件中声明用userinfo替换auth_user
    AUTH__USER_MODEL = 'app01.UserInfo' 应用名.类名

    '''
    phone = models.CharField(max_length=16)

User类表如果要后期拓展字段

1.删除所有app下的迁移文件

2.删除admin & auth下的迁移文件

3.数据库转储为外部文件

4.删库

5.数据库导入

标签:username,request,Auth,Django,user,自带,password,auth,login
From: https://www.cnblogs.com/missfxy/p/16930674.html

相关文章

  • Django视图层
    Django视图层目录Django视图层JsonResponseform表单上传文件及后端获取request对象方法CBV源码'''HttpResponse,返回字符串render,返回html页面,并且可以给html文件传值r......
  • Django自定义系列
    Django自定义系列目录Django自定义系列模板层-自定义过滤器、标签、inclusion_tag自定义过滤器(最多两个参数)自定义过滤器调用自定义标签(可以有多个参数)自定义标签调用自定......
  • Django前后端通信
    Django前后端通信目录Django前后端通信Ajax前后端传输数据的编码格式(contentType)ajax发送json格式数据ajax发送文件django自带的序列化组件ajax结合sweetalert批量插入数......
  • Django模型层
    Django模型层目录Django模型层测试脚本单表操作查看内部sql语句的方式双下划线查询外键增删改正反向多表查询聚合查询分组查询F与Q查询开启事务ORM常用字段及参数数据库查......
  • Django模板层
    Django模板层目录Django模板层模板语法传值过滤器标签自定义过滤器、标签、inclusion_tag模板的继承模板的导入模板语法传值#模板语法形式:1.{{变量相关}}2.{%逻辑......
  • Django初识
    Django初识目录Django初识基本操作项目主要文件介绍初始技巧静态文件配置Request对象form表单request.methodrequest.POSTrequest.GETpycharm连接数据库(MySQL)django连接数......
  • Django路由层
    Django路由层目录Django路由层路由匹配无名分组有名分组反向解析无名分组反向解析有名分组反向解析路由分发名称空间伪静态虚拟环境null路由匹配#url方法第一个参数是......
  • Django版本差异
    Django版本差异#一、路由层'''django1.x路由层使用url方法django2.x/3.x路由层使用path方法可以根据习惯使用re_pathpath方法支持5种转换器'''fromdjango.ur......
  • Django-ORM简介
    DjangoORM目录DjangoORM字段的增删改查数据的增删改查创建表关系null#即对象关系模型#类——表#对象——记录#对象属性(值)——记录某个字段(值)#在models.py中写......
  • Spring Cloud 最新版发布,Spring Security + OAuth2 终于安排上了!
    大家好,我是栈长。今天给大家通报一则框架更新消息,时隔两个月,SpringCloud2021.0.5最新版发布了,来看下最新的SpringCloud版本情况:SpringCloud无疑是现在Java微服务......