用户注册模块(芒果头条项目进度4)

1 创建⽤户模块⼦应⽤

1.1 在项⽬包⽬录下 创建apps的python包

1.2 在apps包下 创建应⽤userapp

$ cd 项⽬包⽬录/apps
$ python ../../manage.py startapp userapp

1.3 配置导包路径 默认情况下导包路径指向项⽬根⽬录

# 通过下⾯语句可以打印当前导包路径
print(sys.path)
# 在dev.py⽂件中配置导包路径
sys.path.insert(0, os.path.join(BASE_DIR, 'apps'))

1.4 注册⼦应⽤

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','userapp',
]

2. 实现展示⽤户注册⻚⾯功能

2.1 在项⽬包⽬录 /templates下 创建基础模板⽂件

2.2 在项⽬包⽬录/templates下 创建userapp⽂件夹

2.3 将 register.html 存放⾄ 项⽬包⽬录/templates/userapp⽬录 

2.4 创建注册视图

class Register(View):def get(self,request):return render(request,'userapp/register.html')

2.5 定义 ⽤户注册路由

# 项⽬根路由
from django.contrib import admin
from django.urls import path, re_path, includeurlpatterns = [path('admin/', admin.site.urls),re_path('^', include(('userapp.urls', 'userapp',), namespace='userapp')),
]
# ⽤户模块⼦路由
from django.urls import re_path
from . import viewsurlpatterns = [re_path('^register/$', views.Register.as_view(), name='register'),
]

3 Django默认⽤户认证系统

  • Django⾃带⽤户认证系统
    • 它处理 ⽤户账号、组、权限以及基于cookie的⽤户会话
  • Django认证系统位置
    • django.contrib.auth包含 认证框架的核⼼和默认的模型
    • django.contrib.contenttypes是 Django内容类型系统,它允许权限与你创建的模型关联
  • Django认证系统同时处理 认证和授权
    • 认证:验证⼀个⽤户是否它声称的那个⼈,可⽤于账号登录。
    • 授权:授权决定⼀个通过了认证的⽤户被允许做什么。
  • Django认证系统包含的内容
    • ⽤户⽤户模型类、⽤户认证
    • 权限标识⼀个⽤户是否可以做⼀个特定的任务,MIS系统常⽤到
    • :对多个具有相同权限的⽤户进⾏统⼀管理,MIS系统常⽤到。
    • 密码:⼀个可配置的密码哈希系统,设置密码、密码校验。

3.1 Django默认⽤户模型类

  • Django认证系统中提供了⽤户模型类,User保存⽤户的数据
    • User对象是认证系统的核⼼。
  • Django认证系统⽤户模型类位置
    • django.contrib.auth.models.User
class User(AbstractUser):"""Users within the Django authentication system are representedby thismodel.Username and password are required. Other fields are optional."""class Meta(AbstractUser.Meta):swappable = 'AUTH_USER_MODEL'
  • ⽗类AbstractUser介绍
  • User对象基本属性
    • 创建⽤户(注册⽤户)必选: username、password
    • 创建⽤户(注册⽤户)可选:email、first_name、last_name、last_login、 date_joined、is_active 、is_staff、is_superuse
    • 判断⽤户是否通过认证(是否登录):is_authenticated
  • 创建⽤户(注册⽤户)的⽅法
user = User.objects.create_user(username, email, password, **extra_fields)
# 源码
def _create_user(self, username, email, password, **extra_fields):"""Create and save a user with the given username, email, andpassword."""if not username:raise ValueError('The given username must be set')email = self.normalize_email(email)username = self.model.normalize_username(username)user = self.model(username=username, email=email, **extra_fields)user.set_password(password)user.save(using=self._db)return userdef create_user(self, username, email=None, password=None, **extra_fields):extra_fields.setdefault('is_staff', False)extra_fields.setdefault('is_superuser', False)return self._create_user(username, email, password,**extra_fields)
  • ⽤户认证 (⽤户登录)的⽅法
from django.contrib.auth import authenticate
user = authenticate(username=username, password=password, **kwargs)
  • 处理密码的⽅法 设置密码:
    • set_password(raw_password)
    • 校验密码:check_password(raw_password)

3.2 ⾃定义⽤户模型类

Django⾃带AbstractUser⽤户模型类中没有⼿机号字段。

class Users(AbstractUser):phone = models.CharField(max_length=11, unique=True, verbose_name='⼿机号')class Meta:db_table = 't_user'verbose_name = '⽤户表'verbose_name_plural = verbose_namedef __str__(self):return self.username

3.3 配置Django⽤户模型类

# Django⽤户认证系统中的⽤户模型类
# django.conf下的global_settings.py⽂件中
AUTH_USER_MODEL = 'auth.User'# 配置规则:
# AUTH_USER_MODEL = '应⽤名.模型类名'
# 指定芒果头条项⽬⽤户模型类
AUTH_USER_MODEL = 'userapp.Users'

3.4 迁移⽤户模型类

注意:如果迁移⾃定义⽤户模型类,必须先配置 AUTH_USER_MODEL

# 1.创建迁移⽂件
$ python manage.py makemigrations userapp
# 2.执⾏迁移⽂件
$ python manage.py migrate

 

4 用户注册功能接口设计

4.1 ⽤户注册业务逻辑分析

4.2 ⽤户注册接⼝设计和定义

  • 对于接⼝的设计,我们要根据具体的业务逻辑,设计出适合业务逻辑的接⼝。
  • 设计接⼝的思路:
    • 分析要实现的业务逻辑:
      • 明确在这个业务中涉及到⼏个相关⼦业务。
      • 将每个⼦业务当做⼀个接⼝来设计。
    • 分析接⼝的功能任务,明确接⼝的访问⽅式与返回数据:
      • 请求⽅法(如GET、POST、PUT、DELETE等)。
      • 请求地址。
      • 请求参数(如路径参数、查询字符串、表单、JSON等 )。
      • 响应数据(如HTML、JSON等)。

4.3 ⽤户注册接⼝设计

  • 请求⽅式
    • 请求⽅法:POST
    • 请求地址:/register/
  • 请求参数(表单参数)

  • 响应结果 :
    • html register.html

4.4 ⽤户注册接⼝定义

  • 创建⽤户注册视图
class RegisterView(View):"""⽤户注册"""def get(self, request):"""提供注册界⾯:param request: 请求对象:return: 注册界⾯"""return render(request, 'register.html')def post(self, request):"""实现⽤户注册:param request: 请求对象:return: 注册结果"""pass
  • 配置路由
# 项⽬根路由
from django.contrib import admin
from django.urls import path, re_path, includeurlpatterns = [path('admin/', admin.site.urls),re_path('^', include(('userapp.urls', 'userapp',), namespace='userapp')),
]
# 应⽤⼦路由
# userapp/urls.py
from django.urls import re_path
from . import viewsurlpatterns = [re_path('^register/$', views.Register.as_view(), name='register'),
]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/66109.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5. C语言 常量与宏定义

本章目录: 前言一、什么是常量?1. 整型常量2. 浮点型常量3. 字符常量4. 字符串常量 二、如何定义常量?1. 使用 #define 宏定义2. 使用 const 关键字 三、#define 和 const 的区别四、使用建议1. 使用场景区分2. 避免宏定义的潜在问题 五、特殊用法与小技…

随机置矩阵列为0[矩阵乘法pytorch版]

文章目录 1. 举例:2. python 代码 1. 举例: A [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 ] , r a n d [ 0 , 5 , 2 ] → A [ 0 1 0 3 4 0 6 7 0 9…

Elasticsearch:利用 AutoOps 检测长时间运行的搜索查询

作者:来自 Elastic Valentin Crettaz 了解 AutoOps 如何帮助你调查困扰集群的长期搜索查询以提高搜索性能。 AutoOps 于 11 月初在 Elastic Cloud Hosted 上发布,它通过性能建议、资源利用率和成本洞察、实时问题检测和解决路径显著简化了集群管理。 Au…

uniapp实现后端数据i18n国际化

1.在main.js配置请求获取到数据再设置到i18n中, 我这里是通过后端接口先获取到一个多个数据的的json链接,通过链接再获取数据,拿到数据后通过遍历的方式设置i18n //接口数据示例:{"vi": "http://localhost:8899/…

关于Flutter应用国际化语言的设置

目录 1. Locale配置 2. 用户切换/启动自动加载缓存里面的locale 由于最近在开发app国际化设置的时候遇到一些问题,所以做出一些总结。 1. Locale配置 具体的初始化配置可以参考文档:i18n | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter 值得…

基层医联体医院患者历史检验检查数据的快速Python编程分析

​​​​​​​ 一、引言 1.1 研究背景与意义 在当今数字化医疗时代,医疗数据呈爆炸式增长,涵盖患者的基本信息、病史、检验检查结果、治疗方案等各个维度。这些海量且复杂的数据蕴含着巨大价值,为精准医疗决策提供了关键依据。通过对患者历史检验检查数据的深入对比分析…

如何使用OpenCV进行抓图-多线程

前言 需求: 1、如何使用OpenCV捕抓Windows电脑上USB摄像头的流、 2、采用多线程 3、获知当前摄像头的帧率。 这个需求,之前就有做了,但是由于出现了一个问题,人家摄像头的帧率目前都可以达到60帧/s 了,而我的程序…

数势科技:解锁数据分析 Agent 的智能密码(14/30)

一、数势科技引领数据分析变革 在当今数字化浪潮中,数据已然成为企业的核心资产,而数据分析则是挖掘这一资产价值的关键钥匙。数势科技,作为数据智能领域的领军者,以其前沿的技术与创新的产品,为企业开启了高效数据分析…

26.Java Lock 接口(synchronized 关键字回顾、可重入锁快速入门、Lock 对比 synchronized)

一、synchronized 关键字 1、synchronized 关键字回顾 synchronized 是 Java 中的关键字,是一种同步锁,它修饰的对象有以下几种 修饰一个类:其作用的范围是 synchronized 后面括号括起来的部分,作用的对象是这个类的所有对象 修…

C++11编译器优化以及引用折叠

1.左值与右值的意义 1.左值引用和右值引用最终目的是减少拷贝,提高效率 2.左值引用还可以修改参数/返回值 左值引用不足: 部分函数放回场景,只能传值返回,不能引用左值返回 当前函数局部对象,出了当前函数作用域生…

云手机 —— 手机矩阵的 “超级外挂

如何打造手机矩阵 打造手机矩阵主要包括以下几个步骤: 1.确定目标与需求:首先,明确打造手机矩阵的目的和需求,是为了进行电商运营、自媒体推广、任务管理还是其他目的。这将决定后续的手机数量、操作系统选择以及应用安装等。 2.选择手机与操作系统:根据…

小程序学习06——uniapp组件常规引入和easycom引入语法

目录 一 组件注册 1.1 组件全局注册 1.2 组件全局引入 1.3 组件局部引入 页面引入组件方式 1.3.1 传统vue规范: 1.3.2 通过uni-app的easycom 二 组件的类型 2.1 基础组件列表 一 组件注册 1.1 组件全局注册 (a)新建compoents文件…

【时时三省】(C语言基础)常见的动态内存错误2

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 对非动态开辟空间内存使用free释放 示例: 这个arr数组是在栈上的 *p指向的就是arr 对非动态空间也用了free ferr只能在动态开辟空间使用 使用free释放一块动态开辟空间的一部分…

3D高斯点云CUDA版本数据制作与demo运行

0. 简介 关于UCloud(优刻得)旗下的compshare算力共享平台 UCloud(优刻得)是中国知名的中立云计算服务商,科创板上市,中国云计算第一股。 Compshare GPU算力平台隶属于UCloud,专注于提供高性价4090算力资源,配备独立IP,…

【游戏设计原理】46 - 魔杖

幻想,人们可以通过多种形式来引发,比如文字,图片,绘画,语言等,但游戏与以上这些形式的区别,正如游戏与其他艺术形式的区别一样,游戏作为一种艺术和娱乐形式,其独特之处在…

基于Java的敬老院管理系统的设计和实现【源码+文档+部署讲解】

基于Java的敬老院管理系统设计和实现 摘 要 新世纪以来,互联网与计算机技术的快速发展,我国也迈进网络化、集成化的信息大数据时代。对于大众而言,单机应用早已成为过去,传统模式早已满足不了当下办公生活等多种领域的需求,在一台电脑上不联网的软件少之又少&#x…

NLP 技术的突破与未来:从词嵌入到 Transformer

在过去的十年中,自然语言处理(NLP)经历了深刻的技术变革。从早期的统计方法到深度学习的应用,再到如今Transformer架构的普及,NLP 的发展不仅提高了模型的性能,还扩展了其在不同领域中的应用边界。 1. 词嵌…

Git快速入门(一)·Git软件的安装以及GitHubDesktop客户端的安装

目录 1. 概述 1.1 版本控制介绍 1.1.1 集中式版本控制 1.1.2 分布式版本控制 1.1.3 多人协作开发 2. 安装Git 3. 安装GitHubDesktop客户端 1. 概述 Git 是一个免费的、开源的分布式版本控制系统。它能够快速高效地处理从小型到大型的各种项目。Git 具有易于学习…

数据挖掘——神经网络分类

神经网络分类 神经网络分类人工神经网络多层人工神经网络 误差反向传播(BP)网络后向传播算法 神经网络分类 人工神经网络 人工神经网络主要由大量的神经元以及它们之间的有向连接构成。包含三个方面: 神经元的激活规则 主要是指神经元输入…

PDF文件提示-文档无法打印-的解决办法

背景信息 下载了几个签名的PDF文件,想要打印纸质版,结果打印时 Adobe Acrobat Reader 提示【文档无法打印】: 解决办法 网上的方案是使用老版本的PDF阅读器, 因为无法打印只是一个标识而已。 PDF文件不能打印的五种解决方案-zhihu 这些方…