Django 【认证系统】auth

引入模块

from django.contrib import auth

登录认证

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

if user is not None:
    # 将登录的用户封装到request.user
    # 在中间件中 process_request 中每次都这样子处理
    # id = request.session.get("user_id") 得到id
    # user = auth.User.objects.get(id=id)
    # request.user = user
    auth.login(request, user=user)
    return redirect("/index/")

验证通过则返回user,没有则返回None,在 login 函数中将认证通过的用户赋值给 request.user 属性,以及内部的 session 操作。 封装request.user = user       

认证装饰器  login_required 

from django.contrib.auth.decorators import login_required

@login_required
def index(request):
    print(request.user.username)
    return render(request, "index.html")

需要配置登录视图的url,所以需要在 settings 文件中配置如下:

# 如果没有登录 默认跳转的url
LOGIN_URL = "/login/"

创建用户

1.普通用户

from django.contrib.auth.models import User

    # 加密的
 user = User.objects.create_user(username="tanglaoer2", password="tanglaoer")
 user.set_password("tang")
 user.save()

2.超级用户

user = User.objects.create_superuser(username="tanglaoer2", password="tanglaoer")
user.set_password("tang")
user.save()

注销

auth.logout(request)

内部相当于 request.session.flush() 

扩展自带的auth_user表

1.新建一个表, 一对一关联上面的auth_user表

或者新建一个表,继承的方式

from django.contrib.auth.models import AbstractUser

class UserInfo(AbstractUser):
    phone = models.CharField(max_length=11)
    addr = models.CharField(max_length=128)

相当于对默认的 auth_user 表做了扩展, 并且代替 auth_user ,还需要在配置文件 settings 中进行如下配置:

# 如果使用继承的方式 继承auth的models,要在settings.py里面配置 默认用户认证时使用的哪张表
AUTH_USER_MODEL = "app.UserInfo"

auth认证还是使用 auth   只是创建用户的时候改为 用 UserInfo 

猜你喜欢

转载自www.cnblogs.com/tangkaishou/p/10226579.html