Django auth模块

文章目录

      • auth 简介
      • auth 模块
      • 简单示例
      • 扩展`auth_user`表

auth 简介

Django内置了强大的用户认证系统auth,它默认使用 auth_user 表来存储用户数据。

INSTALLED_APPS中添加'django.contrib.auth'使用该APP, auth模块默认启用。

auth 模块

  • 创建超级用户:python manage.py createsuperuser

  • auth.authenticate():验证用户名和密码是否正确,一般需要username、password,认证成功返回一个User对象。

  • auth.login():将认证通过后的User对象注入request.user属性,会在后端为该用户生成相关session数据。

  • auth.logout():调用该函数时,当前请求的session信息会全部清除。该用户即使没有登录,使用该函数也不会报错。

  • is_authenticated():判断是否认证。

  • login_requierd():auth 给我们提供的一个装饰器工具,用来快捷的给某个视图添加登录校验。

    • 若用户没有登录,则会跳转到django默认的 登录URL '/accounts/login/' 并传递当前访问url的绝对路径 (登陆成功后,会重定向到该路径)。

      如果需要自定义登录的URL,则需要在settings.py文件中通过LOGIN_URL进行修改。

      LOGIN_URL = '/login/'  # 这里配置成你项目登录页面的路由
      
  • create_user():创建一个新用户,需要username、password等。

  • create_superuser():创建一个超级用户。

  • check_password():检查密码是否正确。

  • set_password():修改密码,设置完一定要调用用户对象的save方法。

简单示例

from django.shortcuts import render, redirect, HttpResponse
from django.contrib import auth
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User


# 登录
def login(request):
    if request.method == 'POST':
        username = request.POST['username']
        password = request.POST['password']
        # 验证用户名以及密码是否正确
        user = auth.authenticate(username=username, password=password)
        if user:
            # 将验证的用户注入request.user属性
            auth.login(request, user)
            return redirect('/my_auth/home/')
        else:
            pass
    return render(request, 'login.html')


# 首页
@login_required
def home(request):
    username = request.user.username
    return HttpResponse('hello {}'.format(username))


# 注册
def register(request):
    User.objects.create_user(username='小黑', password='xiaohei123')
    return HttpResponse('ok!')


# 注销
def logout(request):
    auth.logout(request)
    return redirect('/my_auth/login/')


# 修改密码
def change_password(request):
    user = request.user
    if request.method == 'POST':
        old_password = request.POST.get('old_password')
        new_password = request.POST.get('new_password')

        # 检查旧密码是否正确
        if user.check_password(old_password):
            # 修改密码
            user.set_password(new_password)
            user.save()
            return HttpResponse('修改密码成功')
        else:
            return HttpResponse('原密码错误')
    return render(request, 'change_password.html')

扩展auth_user

定义一个Model类,重新生成数据库

from django.db import models
from django.contrib.auth.models import AbstractUser


class UserInfo(AbstractUser):
    phone = models.CharField(max_length=11)
    address = models.CharField(max_length=30)

setting.py中设置

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

创建普通用户:

UserInfo.objects.create_user(username='用户名', password='密码')

一旦我们指定了新的认证系统所使用的表,我们就需要重新在数据库中创建该表,而不能继续使用原来默认的auth_user表了。

你可能感兴趣的:(Django)