Django auth模块

request.user全局可用(前端或后端)

一、创建超级用户(auth_user)

createsuperuser

进入交互界面

二、author模块

from django.contrib import auth

 

1、authenticate() 验证

判断 前端输入的用户和密码 是否 存在auth_user表中(可以看成ORM的filter语句并取第一个)

返回结果:是当前登录对象

user_obj = auth.authenticate(username=user, password=pwd)

2、login() 注入

将当前登录对象注入到request中,方便在其它函数调用该对象

注入:

auth.login(request, user_obj)

调用:

user_obj = request.user

注意:user是固定写法,获取当前登录的用户对象

   通过该对象获取值,需要通过auth_user中的字段

本质:利用session存储对象

3、logout()

作用:删除request中的注入对象 和request.session.flush() 相似

auth.logout(request)

4、is_authenticated

作用:判断是否验证通过

print(request.user.is_authenticated)

5、login_requierd()

login_required是装饰器

from django.contrib.auth.decorators import login_required

配置setting.py,设置没有登录默认跳转的url

# 没有登录,默认跳转该url
LOGIN_URL = url

6、create_user() 和 create_superuser()

作用:创建用户

导入模块

from django.contrib.auth.models import User

创建用户对象

User.objects.create_user(username="tom1", password="@WSX3edc")

7、check_password(密码)

作用:判断密码是否相等

    user_obj = User.objects.create_user(username="tom2", password="@WSX3edc")
    ret = user_obj.check_password("@WSX3edc")
    print(ret)

8、set_password(新密码)

作用:设置新密码

注意:别忘记save()

 user_obj.set_password("@WSX1234")
    user_obj.save()

登录的例子

views.py

from django.shortcuts import render, redirect
from django.contrib import 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":
        user = request.POST.get("user")
        pwd = request.POST.get("pwd")
        user_obj = auth.authenticate(username=user, password=pwd)
        if user_obj:
            auth.login(request, user_obj)
            return redirect("/index/")
    return render(request, "login.html")


@login_required
# 登录后的页面
def index(request):
    user_obj = request.user
    print(user_obj.username)
    print(request.user.is_authenticated)
    return render(request, "index.html", {"user": user_obj})


# 注销Session,即用户
def logout(request):
    auth.logout(request)
    return redirect("/login/")


# 创建用户
def reg(request):
    user_obj = User.objects.create_user(username="tom3", password="@WSX31234")
    ret = user_obj.check_password("@WSX3edc")
    print(ret)
    user_obj.set_password("@WSX1234")
    user_obj.save()
    return redirect("/login/")

三、扩展auth_user的字段

这里使用继承

from django.db import models
from django.contrib.auth.models import AbstractUser
# Create your models here.


class User(AbstractUser):
    phone = models.CharField(max_length=11, default="11111111")
    addr = models.CharField(max_length=64, default="abc")

配置文件setting.py

# 继承auth_user的时候,需要设置
AUTH_USER_MODEL = 'app名.类名r'

重新运行 makemigrations 和 migrate命令 生成数据表

若失败

django.db.migrations.exceptions.InconsistentMigrationHistory: Migration admin.0001_initial is applied before its dependency app01.0001_initial on database 'default'

本人用的是暴力删除

求告知更好的方法

继承auth_user后,需要对注册进行修改

# 创建用户
def reg(request):
    user_obj = models.User.objects.create_user(username="tom3", password="@WSX31234")
    ret = user_obj.check_password("@WSX3edc")
    print(ret)
    user_obj.set_password("@WSX1234")
    user_obj.save()
    return redirect("/login/")

 

 

  

 

posted @ 2019-08-05 23:53  市丸银  阅读(199)  评论(0编辑  收藏  举报