设为首页 加入收藏

TOP

Django 之Auth模块(一)
2023-07-23 13:43:46 】 浏览:33
Tags:Django Auth 模块

一、Auth 模块是什么


Auth 模块是Django中自带的用户认证模块。

一个网站系统需要实现用户注册、用户登录、用户认证、注销、修改密码等功能,Django中内置了强大的认证系统-auth,默认使用 auth_user 表来存储用户的数据。

同时Django有一个后台管理系统(127.0.0.1:8000/admin),使用的用户名和密码也是这张数据表中的数据。

默认后台管理的用户名和密码是没有的,需要我们创建一个出来,而且只有超级管理员才能登录这个页面,那我们现在就来创建这样一个超级用户。

 

二、扩展默认的 auth_user 表


在一个新的项目中,先设计项目的数据库,表关系,Django 系统内置的认证系统(auth_user表)很好用,但是表字段都是固定的几个,无法进行对它扩展。

比如,默认字段不够我们使用,我们可以对其进行拓展,存储用户手机号、时间等字段,设置表和表之间关系,怎么办?

现在就来设计扩展一下这个表,需要两步

1 配置settings

在 settings.py 配置文件中增加一句话,告诉Django 使用新定义的 UserInfo 表来做用户认证的表。

# settings.py
# 声明使用自定义表作为用户验证,声明格式为: 应用名.表名,继承使用时需要设置
AUTH_USER_MODEL = 'app.UserInfo'

2 配置models

创建一个自定义类并继承AbstractUser类,然后编写 AbstractUser 类中没有的字段并且'不能冲突'。

# app/models.py
from django.db import models
# 导入AbstractBaseUser类,继承AbstractBaseUser类,基本字段
from django.contrib.auth.models import AbstractUser

class UserInfo(AbstractUser):
    '''
    扩展用户信息表
    继承原有的auth_user表字段
    '''
    nid = models.AutoField(primary_key = True)
    phone = models.CharField(max_length = 11, blank = True, null = True, unique = True, verbose_name = "手机号")
    avatar = models.FileField(upload_to = "avatar", default = "avatar/default.png")
    create_time = models.DateField(auto_now_add = True)
    blog = models.OneToOneField(to = 'Blog', null = True, to_field = 'bid', on_delete = models.CASCADE)
    
    class Meta:
        verbose_name_plural = '用户表'
    def __str__(self):
        return self.username
    
class Blog(models.Model):
    bid = models.AutoField(primary_key = True)
    site_name = models.CharField(verbose_name = "站点名称", max_length = 32)
    site_title = models.CharField(verbose_name = "站点标题", max_length = 32)
    site_theme = models.CharField(verbose_name = "站点样式", max_length = 255)
    def __str__(self):
        return self.site_name

最后,执行两条数据库迁移命令。

python manage.py makemigrations
python manage.py migrate

 注意:所在的库必须是第一次执行迁移命令才可以,若是原本有残留会 引起异常。

 

三、创建超级用户


默认后台管理的用户名和密码是没有的,需要我们创建一个出来,而且只有超级管理员才能登录这个页面,那我们现在就来创建这样一个超级用户

python manage.py createsuperuser

 

四、Auth 模块常用方法


1 auth模块常用方法

from django.contrib import auth

 

2 authenticate()

校验用户名和密码是否正确,可以用来判断当前是否登录,也就是否有session数据。

from django.shortcuts import render, HttpResponse, redirect
from django.contrib import auth
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)
        print(user_obj)
        if user_obj:
            # 保存用户状态
            auth.login(request, user_obj)
            return HttpResponse('OK')
    return render(request, 'login.html')

authenticate方法如果认证成功(用户名和密码正确有效,就是去 UserInfo 表中查询一下是否存在这条记录),便会返回一个 User 对象,查询认证失败返回None。

templates/login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
    <form action="" method="post">
        {% csrf_token %}
        <p>username:<input type="text" name="username"></p>
        <p>password:<input type="text" name="password"></p>
        <input type="submit">
    </form>
</body>
</html>

 

3 login(HttpRequest, user)

该函数接

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python 注册菜单 下一篇bbs项目前期准备和表设计

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目