Django auth用户认证模块

  • 1、Django auth用户认证
  • 2、Django auth用户模型
  • 3、自定义auth用户模型
  • 4、数据迁移
  • 5、web开发一个应用
    • 5.1 定义路由
      • 1.一级路由
      • 2.二级路由
    • 5.2 定义视图函数
    • 5.3 定义模板

1、Django auth用户认证

Django auth用户认证自带了一套用户认证模块:
from django.contrib import auth

2、Django auth用户模型

Django auth用户认证,必然少不了该模块的模型(models):
该模块的模型(models) :
1.AbstractBaseUser --> 他是一个基类

class AbstractBaseUser(models.Model):password = models.CharField(_("password"), max_length=128)last_login = models.DateTimeField(_("last login"), blank=True, null=True)is_active = TrueREQUIRED_FIELDS = []_password = Noneclass Meta:abstract = True

2.AbstractUser --> 继承AbstractBaseUser 也是一个抽象类

class AbstractUser(AbstractBaseUser, PermissionsMixin):username_validator = UnicodeUsernameValidator()username = models.CharField(_("username"),max_length=150,....)first_name = models.CharField(_("first name"), max_length=150, blank=True)last_name = models.CharField(_("last name"), max_length=150, blank=True)email = models.EmailField(_("email address"), blank=True)is_staff = models.BooleanField(_("staff status"),default=False,.....)is_active = models.BooleanField(_("active"),default=True,....)date_joined = models.DateTimeField(_("date joined"), default=timezone.now)objects = UserManager()EMAIL_FIELD = "email"USERNAME_FIELD = "username"REQUIRED_FIELDS = ["email"]class Meta:verbose_name = _("user")verbose_name_plural = _("users")abstract = True

3.User–> 继承AbstractUser

class User(AbstractUser):class Meta(AbstractUser.Meta):swappable = "AUTH_USER_MODEL"

3、自定义auth用户模型

我们只要重定义User就可以了,但是必须继承AbstractUser 类
并且在配置文件中需要定义:AUTH_USER_MODEL = "users.UserDetail"
users:是app应用名
UserDetail:是定义的类名

# users应用中models.py重定义auth用户模型
from django.db import models
from django.contrib.auth.models import AbstractUser
class UserDetail(AbstractUser):age = models.DateField(null=True)desc = models.TextField(null=True)sex = models.CharField(max_length=4)school_status = models.CharField(max_length=4)grade = models.CharField(max_length=16)

4、数据迁移

自定义好模型,就是数据迁移
python manage.py makemigratation
python manage.py migrate

5、web开发一个应用

5.1 定义路由

1.一级路由

from django.contrib import admin
from django.urls import path
from django.urls import re_path
from django.urls import includeurlpatterns = [path('admin/', admin.site.urls),re_path('^user/', include("users.urls")),re_path('^user/', include("users.urls")),# re_path(r'^user/',include(('users.urls',"users"),namespace="user")) # 通过{% url 'user' %}访问
]

2.二级路由

from django.urls import re_path
from . import views
urlpatterns = [re_path('login/$', views.login, name='login'),re_path('register/$', views.register, name='register'),
]

5.2 定义视图函数

from django.shortcuts import render
from django.http import HttpResponseForbidden, JsonResponse
from django.contrib.auth import authenticate
from users.models import UserDetail
from utils.serializer import UserDetailSerializerdef login(request):if request.method == 'GET':return render(request, 'login.html')else:username = request.POST.get('username')password = request.POST.get('password')request_user = authenticate(request, username=username, password=password)if request_user is not None:return render(request, 'index.html', {'request_user': request_user})else:return render(request, 'login.html')def register(request):if request.method == 'GET':return render(request, 'register.html')else:data = {'username': request.POST.get('username'),'password': request.POST.get('password'),'age': request.POST.get('age'),'desc': request.POST.get('desc'),'sex': request.POST.get('sex'),'school_status': request.POST.get('school_status'),'grade': request.POST.get('grade'),}serializer = UserDetailSerializer(data=data)if serializer.is_valid():# 如果要使用authenticate()函数认证用户,必须要对password进行哈希加密处理,而create_user()创建用户,就对密码进行了哈希,最好使用create_user创建用户request_user = UserDetail.objects.create_user(**serializer.data)return render(request, 'index.html', {'request_user': request_user})else:return HttpResponseForbidden("注册失败")

5.3 定义模板

1、模板调用关系:login继承base,并包含form
2、模板调用关系:register继承base,并包含form

<!-- base.html -->
<!DOCTYPE html>
{% load static %}
<html lang="en">
<head><meta charset="UTF-8"><title>{% block title %}{% endblock title %}</title><link type="text/css" rel="stylesheet" href="{% static 'layui/css/layui.css' %}"><script src="{% static 'layui/layui.js' %}"></script>
</head>
<body>
<div class="layui-header" style="background-color: bisque; display: flex;align-items: center"><div class="layui-container"><div class="layui-row">{% if request_user %}<div class="layui-col-md2 layui-col-md-offset10"><i class="layui-icon layui-icon-user layui-circle" style="font-size: 24px; color: #f92e27; background-color: #eeeeee"></i><button type="button" class="layui-btn layui-btn-primary"><a href="#">注销</a></button></div>{% else %}<div class="layui-col-md2 layui-col-md-offset10"><div class="layui-btn-group"><button type="button" class="layui-btn layui-btn-primary"><a href="{% url 'user:login' %}">登录</a></button><button type="button" class="layui-btn layui-btn-primary"><a href="{% url 'user:register' %}">注册</a></button></div></div>{% endif %}</div></div>
</div>
<div class="layui-main">{% block content %}{% endblock content %}
</div>
<div class="layui-footer" style="background-color: bisque; display: flex;align-items: center; height: 60px">{% block footer %}{% endblock footer %}
</div>
</body>
{% block scripts %}
{% endblock scripts %}
</html><!-- form.html -->
<form class="layui-form layui-form-pane" action="{% url form_type %}" method="post">{% csrf_token %}<div class="layui-form-item"><label for="id_username" class="layui-form-label">用户名</label><div class="layui-input-block"><input class="layui-input" type="text" id="id_username" name="username" autocomplete="off"lay-verify="required|tLength" required></div>{#        <div class="layui-form-mid layui-word-aux">{{ huit_name }}</div>#}</div><div class="layui-form-item"><label for="id_password" class="layui-form-label">密码</label><div class="layui-input-block"><input class="layui-input" type="password" id="id_password" name="password" autocomplete="off"lay-verify="required|tLength" required></div>{#        <div class="layui-form-mid layui-word-aux">{{ huit_pwd }}</div>#}</div>{% if form_type == 'user:login' %}<div class="layui-form-item"><label for="id_check_code" class="layui-form-label">验证码</label><div class="layui-input-block"><input class="layui-input" type="text" id="id_check_code" name="check_code"><img src="#" alt="验证码"></div>{#            <div class="layui-form-mid layui-word-aux"><img src="#" alt="验证码"></div>#}</div><div class="layui-form-item"><div class="layui-input-block"><input type="checkbox" id="id_un_auth" name="un_auth" title="30天免密登录" lay-skin="primary"></div></div><div class="layui-form-item"><div class="layui-input-block"><button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button><button type="reset" class="layui-btn layui-btn-primary">重置</button></div></div>{% endif %}{% if form_type == 'user:register' %}<div class="layui-form-item"><label for="id_auth_pwd" class="layui-form-label">确认密码</label><div class="layui-input-block"><input class="layui-input" type="text" id="id_auth_pwd" name="auth_pwd"lay-verify="required|tLength" required><span class="err_auth_pwd"></span></div></div><div class="layui-form-item"><label for="id_age" class="layui-form-label">生日日期</label><div class="layui-input-inline"><input class="layui-input" type="text" id="id_age" name="age" autocomplete="off"><span class="err_age"></span></div></div><div class="layui-form-item layui-form-text"><label for="id_desc" class="layui-form-label">性格描述</label><div class="layui-input-block"><textarea class="layui-textarea" type="text" id="id_desc" name="desc"></textarea></div></div><div class="layui-form-item" pane><label for="id_sex" class="layui-form-label">性别</label><div class="layui-input-block"><input type="radio" id="id_sex" name="sex" checked title="男"><input type="radio" id="id_sex" name="sex" title="女"></div></div><div class="layui-form-item " pane><label for="id_school_status" class="layui-form-label">是否在读</label><div class="layui-input-block"><input type="radio" id="id_school_status" name="school_status" checked title="是"><input type="radio" id="id_school_status" name="school_status" title="否"></div></div><div class="layui-form-item"><label for="id_grade" class="layui-form-label">年级</label><div class="layui-input-block"><select name="grade" lay-verify="required" id="id_grade"><option value="1">一年级</option><option value="2">二年级</option><option value="3">三年级</option><option value="4">四年级</option><option value="5">五年级</option><option value="6">六年级</option><option value="7">七年级</option><option value="8">八年级</option><option value="9">九年级</option></select></div></div><div class="layui-form-item"><div class="layui-input-block"><button class="layui-btn" lay-submit lay-filter="formDemo">立即提交</button><button type="reset" class="layui-btn layui-btn-primary">重置</button></div></div>{% endif %}
</form><script>//Demolayui.use(['form', 'laydate'], function () {let form = layui.form;let laydate = layui.laydate;form.verify({tLength: function (value) {let i = 0, sum = 0;for (i = 0; i < value.length; i++) {//  console.log(value.charCodeAt(i));  获取字符的Unicode编码0~65535(2^16,两个字节)if ((value.charCodeAt(i) >= 0) && (value.charCodeAt(i) <= 255))  // 判断字符是什么类型编码sum = sum + 1;elsesum = sum + 2;}if (sum < 4) {return '最少输入4个字符或者2个中文字';} else if (sum > 16) {return '最多输入32个字符或者16个中文字';}}});//提交form.on('submit(formDemo)', function (data) {layer.msg(JSON.stringify(data.field));return true;});laydate.render({elem: '#id_age', //指定元素type: 'date',{#format: 'yyyy-MM-dd'#}});});
</script><!--login.html-->
{% extends 'base.html' %}
{% load static %}
{% block title %}大圣传媒股份有限公司{% endblock title %}{% block content %}{% include './pluges/form.html' with  form_type='user:login' %}
{% endblock content %}<!-- form_type='user:login'给包含的html页面传递参数 -->{% block footer %}<div class="layui-footer footer footer-demo" style="background-color: bisque"><p><a href="#">Risk of Media</a> © 2022 <a href="">大圣传媒</a> Licensed 免责声明 开源协议 深ICP备2022002563号</p></div>
{% endblock footer %}<!--register.html-->
{% extends 'base.html' %}
{% load static %}
{% block title %}大圣传媒股份有限公司{% endblock title %}{% block content %}{% include './pluges/form.html' with form_type='user:register' %}
{% endblock content %}{% block footer %}<div class="layui-footer footer footer-demo" style="background-color: bisque"><p><a href="#">Risk of Media</a> © 2022 <a href="">大圣传媒</a> Licensed 免责声明 开源协议 深ICP备2022002563号</p></div>
{% endblock footer %}

Django auth用户认证模块相关推荐

  1. Django进阶-auth集成认证模块

    auth认证模块是Django内置集成的一个用户认证模块. auth认证模块方法 方法 释义 auth.authenticate() 认证校验 auth.login(request,user) 封装认 ...

  2. python 全栈开发,Day79(Django的用户认证组件,分页器)

    一.Django的用户认证组件 用户认证 auth模块 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中: 如果用户存在于数据库中,然后再验证用户 ...

  3. Django默认用户认证系统和用户模型类

    Django默认用户认证系统和用户模型类 1.Django默认用户认证系统 Django自带用户认证系统 Django认证系统位置 Django认证系统同时处理认证和授权 Django认证系统包含的内 ...

  4. laravel 5.2 Auth用户认证教程

    官方文档:Laravel 5.2文档服务--用户认证 如果你看官方文档不太懂,那么请看下文操作. 说明 框架版本:laravel 5.2 laravel 5.2内置了auth用户认证服务,所以做网站时 ...

  5. django Auth用户登录

    django Auth用户登录 from apps.子应用名.models import UserDetails, User from django.contrib import auth from ...

  6. Django(part48)--用户认证系统

    学习笔记,仅供参考 文章目录 用户认证系统 User模型类 auth基本模型操作 创建用户 删除用户 修改密码 检查密码是否正确 用户认证系统 Django自带一个用户认证系统,它处理用户账号.组.权 ...

  7. Django组件-用户认证

    用户认证 一.auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介绍其中的三个: 1.1 .authenti ...

  8. Django Auth 登录认证

    一.Auth 模块介绍 用户模型:用户认证.登录.退出等 后台管理:用户管理.权限分配 Django自带一个用户认证系统,用于处理账号.组.权限以及基于Cookie的用户会话 1.1 安装与配置 # ...

  9. laravel的auth用户认证的例子

    参考http://www.cnblogs.com/yjf512/p/4042356.html 需要注意的是,生成的测试数据,password部分必须用laravel自带的hash一下 Hash::ma ...

最新文章

  1. SAP QM 不常用功能点之 Physical-Sample Record
  2. linux如何去掉目录背景颜色
  3. JPA中实现双向多对多的关联关系(附代码下载)
  4. boost::callable_traits的is_rvalue_reference_member的测试程序
  5. 【yii2】 yii框架如果控制器和方法都是多个单词组成应该怎样写请求链接
  6. WSDM 2022 | 一种用于在线广告自动竞价的协作竞争多智能体框架
  7. MySQL sysdate()函数
  8. 将element-china-area-data获取的地区编码转为文字存储
  9. OLED工作原理及结构
  10. 计算机在材料科学中的应用论文,计算机在材料科学中的应用论文(2)
  11. 国家计算机二级c语言历年真题及答案,全国计算机二级C语言历年真题
  12. 工期计算机在线,工期日历计算器
  13. linux文件夹的执行权限不够怎么解决
  14. 16.【linux驱动】spi驱动TFT液晶屏
  15. Simulink Resolver 旋转变压器解码仿真
  16. 国家标准GB7713-87
  17. 20170315学习笔记-前端
  18. 前端开发-后台信息管理页面的开发流程
  19. EPON SFU MDU
  20. 联想服务器系统初始化失败怎么回事,登陆进程初始化失败原因及解决办法

热门文章

  1. Android打开WIFI、关闭WIFI、检测当前WIFI状态
  2. TestNG修改reportNG输出description
  3. mysql 嵌套查询性能_mysql SQL优化之嵌套查询-遁地龙卷风
  4. Single-stage目标检测网络YOLO相关背景知识
  5. Comet OJ - Contest #10 沉鱼落雁
  6. springboot+食堂预约订餐小程序 毕业设计-附源码221554
  7. python 接收外部参数_python 接收处理外带的参数方法
  8. 【入门PLC】02、博途TIA Portal V16的HMI简单操作学习(人机交互界面)
  9. 用Netty实现简单的聊天:一对一匹配聊天
  10. dr.oracle素颜霜好用吗,蒂佳婷素颜霜怎么样?蒂佳婷素颜霜好用吗