Django 之 如何使用Auth模块

文章目录

  • auth_user字段
  • 登录、验证和注销
  • 使用装饰器
  • 创建用户
  • 密码
  • 扩展auth模块


auth_user字段

字段 描述
id
username 用户名
password 密码
last_login 上次登录时间
is_superuser 是否超管, 1 - 是, 0 - 否
first_name
last_name
email 邮箱
is_staff 用户是否拥有网站的管理权限
is_active 是否允许用户登录, 1 - 允许, 0 - 不允许
date_joined 加入日期

登录、验证和注销

"""
	
	实例化用户: auth.authenticate(username='username',password='password')
	登录: auth.login(request, user)
	注销: auth.logout(request)

"""

from django import views
from django.contrib import auth # 导入模块

# 登录
class Login(views.View):

    # get请求, 获得登录页面
    def get(self, request):
        return render('login.html')     
              
    # post请求, 提交用户名密码
    def post(self, request, username, password):
        # 通过 authenticate 方法实例化对象, 若存在则返回一个对象, 若不存在则返回空
        userobj = auth.authenticate(username=username, password=password) 
        if userobj:
            # 使用login方法进行登录
            auth.login(request, userobj)
            return HttpResponse('登录成功')
        else:
            return HttpResponse('登录失败')


# 判断是否已经登录, 如果登录, 展示注销按钮, 并可以注销, 如果没登录不展示
def page1(request):
    if request.user.is_authenticated:
        data = True
    else:
        data = False
    return render(request, "p1.html", {"data": data})
       
                
# 注销
def logout(request):
    auth.logout(request)
    return HttpResponse('注销成功')
     

使用装饰器

"""

	验证用户是否已经登录: request.user.is_authenticated()
	FBV装饰器: login_required
	CBV装饰器: method_decorator
	
	以上两个方法如果未登录, 会跳django默认的url, 需要在settings.py中指定
	LOGIN_URL = "login"
	即本例子中的登录页 url 

"""

# 装饰器方法
from django.contrib.auth.decorators import login_required
from django.utils.decorators import method_decorator

# FBV
@login_required
def page2(request):
    return render(request, "p1.html")


# CBV
class Page3(views.View):

    @method_decorator(login_required)
    def get(self, request):
        return

    def post(self, request):
        return render(request, "p1.html")
        

创建用户

from django.contrib.auth.models import User

# 创建普通用户
def createuser(request):
    User.objects.create_user(username = '用户名', password = '密码', email = '邮箱').save()

# 创建超级用户
def createsuperuser(request):
    User.objects.create_superuser(username = '用户名', password = '密码', email = '邮箱').save()
    

密码

# 需要先实例化一个user
userobj = auth.authenticate(username=username, password=password)

# 检查密码是否正确
def checkpwd(request):
    userobj.check_password('xxx')

# 设置密码
def set_pwd(request):
    userobj.set_password(password='xxx')  
    userobj.save()
    

扩展auth模块

"""

	自建表里就不需要有auth_user里重复的字段,但是还是可以直接使用这些字段的,并且django会自动将password进行加密

"""

from django.contrib.auth.models import AbstractUser

class UserInfo(AbstractUser):
    """
   		用户信息表
    """
    nid = models.AutoField(primary_key=True)
    phone = models.CharField(max_length=11, null=True, unique=True)
    
    def __str__(self):
        return self.username
        

"""

	注意:扩展了置的auth_user表之后,一定要在settings.py中告诉Django,我现在使用我新定义的UserInfo表来做用户认证

"""

# 引用Django自带的User表,继承使用时需要设置
AUTH_USER_MODEL = "app名.UserInfo"

# 需要重新创建表
python manage.py makemigrations
python manage.py migrate

你可能感兴趣的:(#,Django)