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

news2025/1/8 14:11:36

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, include

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path('^', include(('userapp.urls', 'userapp',), namespace='userapp'
                         )),
]
# ⽤户模块⼦路由
from django.urls import re_path
from . import views

urlpatterns = [
    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 represented
    by this
    model.
    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, and
    password.
     """
    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 user


def 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_name

    def __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, include

urlpatterns = [
    path('admin/', admin.site.urls),
    re_path('^', include(('userapp.urls', 'userapp',), namespace='userapp')),
]
# 应⽤⼦路由
# userapp/urls.py
from django.urls import re_path
from . import views

urlpatterns = [
    re_path('^register/$', views.Register.as_view(), name='register'),
]

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

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

相关文章

element输入框及表单元素自定义前缀

如图所示&#xff1a; <el-input class"custom-input" placeholder"请输入" prefix-icon"prefix" v-model"form.name" clearable></el-input> :deep(.custom-input) {.el-input__icon {display: inline-block;width: 40…

使用MPTCP+BBR进行数据传输,让网络又快又稳

1.前言 在前文《链路聚合技术——多路径传输Multipath TCP(MPTCP)快速实践》中我们使用mptcpize run命令实现了两个节点间通信使用MPTCP协议进行传输&#xff0c;并实现了传输速率的聚合。 实际应用中更推荐原生支持mptcp的应用&#xff0c;在MPTCP官网中可以看到如TCPDump、…

电商Google广告:2025年提升转化率的5种策略

展望 2025 年&#xff0c;Google 广告领域将迎来一系列显著变化&#xff0c;这些趋势对于提升广告转化率至关重要&#xff0c;值得我们提前关注与布局。 智能化程度持续加深&#xff0c;用户搜索习惯愈发精细&#xff0c;广告格式推陈出新&#xff0c;视频广告势头正猛...那么…

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

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

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

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

Unity 中计算射线和平面相交距离的原理

有此方法 能够计算射线和平面是否相交以及射线起点到平面交点的距离 代码分析 var dot Vector3.Dot(ray.direction, plane.normal);计算射线和平面法线的点积&#xff0c;如果大于等于0&#xff0c;则说明射线和平面没有相交&#xff0c;否则&#xff0c;说明射线和平面相交…

C 语言的整型提升问题

目录 引言 一、什么是整型提升 二、为什么会有整型提升 三、整型提升的规则 四、整型提升的影响 五、如何避免整型提升带来的问题 六、总结 引言 在 C 语言中&#xff0c;整型提升&#xff08;Integer Promotion&#xff09;是一个常常被忽视但却非常重要的概念。理解整…

LangChain4j 框架探索

LangChain4j 框架探索 Get Started核心概念1 - Message核心概念2 - Model核心概念3 - Ai Services核心概念4 - Structured Output核心概念5 - Chat Memory核心概念6 - Tool (Function Calling)核心概念7 - RAG(Retrieval-Augmented Generation)核心 RAG APIs使用示例 总结 Get …

区块链安全常见的攻击分析——Unprotected callback - ERC721 SafeMint reentrancy【8】

区块链安全常见的攻击分析——Unprotected callback - ERC721 SafeMint reentrancy【8】 1.1 漏洞分析1.2 漏洞合约1.3 攻击分析1.4 攻击合约 重点&#xff1a;MaxMint721 漏洞合约的 mint 函数调用了 ERC721 合约中的 _checkOnERC721Received 函数&#xff0c;触发 to 地址中实…

特殊版的专业工具,支持批量处理!

今天给大家推荐一个图片压缩的软件&#xff0c;这个软件最厉害的地方在于它是一个无损压缩软件&#xff0c;十分好用&#xff0c;强烈推荐给大家。 Caesium Image Compressor 图片压缩 Caesium Image Compressor是可以保证图片原有画质不变的前提下&#xff0c;对图片进行无损…

ESP32-C3环境搭建

参考第二讲 ubuntu下的ESP-IDF开发环境搭建_哔哩哔哩_bilibili 宸芯IOT中的资料搭建 因为我买的板子是ESP32C3&#xff0c;所以没有完全按照教程去设置环境&#xff0c;但是也成功。 一、下载ubuntu系统以及esp-idf https://cn.ubuntu.com/download/server/step1 在以上链接…

使用Apache Mahout制作 推荐引擎

目录 创建工程 基本概念 关键概念 基于用户与基于项目的分析 计算相似度的方法 协同过滤 基于内容的过滤 混合方法 创建一个推荐引擎 图书评分数据集 加载数据 从文件加载数据 从数据库加载数据 内存数据库 协同过滤 基于用户的过滤 基于项目的过滤 添加自定…

提升汽车金融租赁系统的效率与风险管理策略探讨

内容概要 在汽车金融租赁系统这个复杂的生态中&#xff0c;提升整体效率是每个企业都渴望达成的目标。首先&#xff0c;优化业务流程是实现高效运行的基础。通过分析目前的流程&#xff0c;找出冗余环节并进行简化&#xff0c;能够帮助企业缩短审批时间&#xff0c;提高客户满…

3、蓝牙打印机按键 - GPIO输入控制

1、硬件 1.1、看原理图 初始高电平&#xff0c;按键按下导通处于低电平状态。 PB8号引脚。 1.2、看手册 a、看系统架构 GPIOB号端口有APB2总线控制 b、RCC使能 RCC->APB2ENR的第3位控制GPIOB使能。 c、GPIOB寄存器配置 浮空输入模式下&#xff0c;I/O的电平状态是不确定…

1.C语言教程:历史、特点、版本与入门示例

目录 1.历史2.特点3.版本4.编译5.Hello World 示例 1.历史 本篇原文为&#xff1a;C语言教程&#xff1a;历史、特点、版本与入门示例。 更多C进阶、rust、python、逆向等等教程&#xff0c;可去此站查看&#xff1a;酷程网 C 语言的诞生源于 Unix 系统的开发需求。 1969 年…

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

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

智慧工地解决方案 1

建设背景与挑战 工地施工现场环境复杂&#xff0c;人员管理难度大&#xff0c;多工种交叉作业导致管理混乱&#xff0c;事故频发。传统管理方式难以实现科学、有效、集中式的管理&#xff0c;特别是在环境复杂、地点分散的情况下&#xff0c;监管困难&#xff0c;取证复杂。施…

笔上云世界微服务版

目录 一、项目背景 二、项目功能 一功能介绍 三、环境准备 • 需要开发的端口 • Mysql 导入数据库 ​编辑 • Redis ​编辑 • RabbitMQ ​编辑 在创建blog虚拟主机(方法如下) • Nacos • Nginx 四、前端部署 五、后端部署 六、测试计划操作 一功能测试 二…

SQL Server 数据库 忘记密码

1、先用windows 身份验证 连接 2、安全性--登录名 3、设置 身份验证 4、重启电脑 5、登录 登陆成功!!! ------------------------------------------------------------------ --1、查询登录账号信息 ------------------------------------------------------------------ -- …

windows安装并配置Maven

Maven官网下载 https://maven.apache.org 将下载好的解压到自己想要存放的路径中&#xff08;路径中不要有中文或者影响环境的字符&#xff09; 在此目录内新建一个名为repository的文件夹&#xff0c;此文件的目的是作为本地Maven的仓库来使用 配置环境变量 按下windows加r键…