【Django开发】前后端分离django美多商城项目第2篇:展示用户注册页面,1. 创建用户模块子应用【附代码文档】

news2025/1/12 3:59:48

全套笔记资料代码移步: 前往gitee仓库查看

感兴趣的小伙伴可以自取哦~

本教程的知识点为: 项目准备 项目准备 配置 1. 修改settings/dev.py 文件中的路径信息 2. INSTALLED_APPS 3. 数据库 用户部分 图片 1. 后端接口设计: 视图原型 2. 具体视图实现 用户部分 使用Celery完成发送 判断帐号是否存在 1. 判断用户名是否存在 后端接口设计: 用户部分 JWT 什么是JWT 起源 传统的session认证 用户部分 登录 1. 业务说明 2. 后端接口设计 3. 后端实现 登录 使用登录的流程 创建模型类 urllib使用说明 登录回调处理 登录 使用登录的流程 创建模型类 urllib使用说明 绑定用户身份接口 邮件与验证 学习目标: 业务说明: 技术说明: 保存邮箱并发送验证邮件 省市区地址查询 数据库建表 说明 页面静态化 注意 定时任务 安装 部分 详情页 异步任务的触发 。 后端接口设计 收货地址 使用缓存 安装 使用方法 为省市区视图添加缓存 数据库表设计 表结构 数据表结构 首页数据表结构 Docker使用 Docker简介 用户浏览历史记录 1. 保存 后端接口设计 后端实现 搜索 1. 需求分析 2. 搜索引擎原理 3. Elasticsearch 部分 业务需求分析 技术实现 数据存储设计 1. Redis保存已登录用户 商品部分 业务需求分析 技术实现 查询数据 1. 后端接口设计 部分 业务需求分析 技术实现 登录合并 修改登录视图 部分 保存 1. 后端接口设计 2. 后端实现 保存的思路 创建数据库模型类 接入 开发平台登录 沙箱环境 Xadmin 1. 安装 2. 使用 站点的全局配置 站点Model管理。 在Ubuntu中安装 2. 启动与停止 3. 镜像操作 端与自定义文件存储系统 1. 的Python客户端 安装 使用。

全套教程部分目录:


部分文件图片:

展示用户注册页面

创建用户模块子应用

1. 创建用户模块子应用

1.准备apps包,用于管理所有应用

2.在apps包下创建应用users

$ cd ~/projects/meiduo_project/meiduo_mall/meiduo_mall/apps
$ python ../../manage.py startapp users

2. 查看项目导包路径

重要提示:

  • 若要知道如何导入users应用并完成注册,需要知道项目导包路径

已知导包路径

  • meiduo_project/meiduo_mall

已知 'users’应用所在目录

  • meiduo_project/meiduo_mall/meiduo_mall/apps/users

得到导入’users’应用的导包路径是:meiduo_mall/apps/users

3. 注册用户模块子应用

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

    'meiduo_mall.apps.users', # 用户模块应用
]

注册完users应用后,运行测试程序。

追加导包路径

思考:

  • 是否可以将注册users应用做的更加简便?
  • 按照如下形式,直接以应用名users注册
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    'users', # 用户模块应用
]

分析:

  • 已知导包路径

    • meiduo_project/meiduo_mall
  • 已知’users’应用所在目录

    • meiduo_project/meiduo_mall/meiduo_mall/apps/users
  • 若要直接以应用名’users’注册

    • 需要一个导包路径:meiduo_project/meiduo_mall/meiduo_mall/apps

解决办法

* 追加导包路径:`meiduo_project/meiduo_mall/meiduo_mall/apps`

1. 追加导包路径

1.查看项目BASE_DIR

2.追加导包路径

2. 重新注册用户模块应用

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

    'users', # 用户模块应用
]

重新注册完users应用后,运行测试程序。

3. 知识要点

  1. 查看导包路径

    • 通过查看导包路径,可以快速的知道项目中各个包该如何的导入。
    • 特别是接手老项目时,可以尽快的适应项目导包的方式。
  2. 追加导包路径

    • 通过追加导包路径,可以简化某些目录复杂的导包方式。

展示用户注册页面

1. 准备用户注册模板文件

加载页面静态文件

<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>美多商城-注册</title>
    <link rel="stylesheet" type="text/css" href="{{ static('css/reset.css') }}">
    <link rel="stylesheet" type="text/css" href="{{ static('css/main.css') }}">
</head>

2. 定义用户注册视图

class RegisterView(View):
    """用户注册"""

    def get(self, request):
        """
        提供注册界面
        :param request: 请求对象
        :return: 注册界面
        """
        return render(request, 'register.html')

3. 定义用户注册路由

1.总路由

urlpatterns = [
    # users
    url(r'^', include('users.urls', namespace='users')),
]

2.子路由

urlpatterns = [
    # 注册
    url(r'^register/$', views.RegisterView.as_view(), name='register'),
]

用户模型类

定义用户模型类

1. Django默认用户认证系统

  • Django自带用户认证系统

    • 它处理用户账号、组、权限以及基于cookie的用户会话。
  • Django认证系统位置

    • django.contrib.auth包含认证框架的核心和默认的模型。
    • django.contrib.contenttypes是Django内容类型系统,它允许权限与你创建的模型关联。
  • Django认证系统同时处理认证和授权

    • 认证:验证一个用户是否它声称的那个人,可用于账号登录。
    • 授权:授权决定一个通过了认证的用户被允许做什么。
  • Django认证系统包含的内容

    • 用户:用户模型类、用户认证。
    • 权限:标识一个用户是否可以做一个特定的任务,MIS系统常用到。
    • 组:对多个具有相同权限的用户进行统一管理,MIS系统常用到。
    • 密码:一个可配置的密码哈希系统,设置密码、密码校验。

2. Django默认用户模型类

  • Django认证系统中提供了用户模型类User保存用户的数据。

    • User对象是认证系统的核心。
  • Django认证系统用户模型类位置

    • django.contrib.auth.models.User

  • 父类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)




* 用户认证(用户登录)的方法
```python
from django.contrib.auth import authenticate
user = authenticate(username=username, password=password, **kwargs)
  • 处理密码的方法

    • 设置密码:set_password(raw_password)
    • 校验密码:check_password(raw_password)

3. 自定义用户模型类

思考:为什么要自定义用户模型类?

  • 观察注册界面会发现,美多商城注册数据必选用户mobile信息
  • 但是Django默认用户模型类中没有mobile字段,所以要自定义用户模型类。

如何自定义用户模型类?

  • 继承自AbstractUser(可通过阅读Django默认用户模型类的源码得知) 。
  • 新增mobile字段。
from django.db import models
from django.contrib.auth.models import AbstractUser

  
  
# Create your models here.
  
  


class User(AbstractUser):
    """自定义用户模型类"""
    mobile = models.CharField(max_length=11, unique=True, verbose_name='手机号')

    class Meta:
        db_table = 'tb_users'
        verbose_name = '用户'
        verbose_name_plural = verbose_name

    def __str__(self):
        return self.username

4. 知识要点

  1. Django自带用户认证系统核心就是User对象,并封装了一系列可用的方法和属性。
  2. Django用户认证系统包含了一系列对用户的操作,比如:模型类,认证,权限,分组,密码处理等。
  3. Django用户认证系统中的用户模型类可以自定义,继承自AbstractUser
  4. [Django用户认证系统说明文档](

迁移用户模型类

1. 指定用户模型类

思考:为什么Django默认用户模型类是User?

  • 阅读源代码:‘django.conf.global_settings’
AUTH_USER_MODEL = 'auth.User'

结论:

  • Django用户模型类是通过全局配置项 AUTH_USER_MODEL 决定的

配置规则:

AUTH_USER_MODEL = '应用名.模型类名'
  
  
# 指定本项目用户模型类
  
  
AUTH_USER_MODEL = 'users.User'

2. 迁移用户模型类

1.创建迁移文件

  • python manage.py makemigrations

2.执行迁移文件

  • python manage.py migrate

3. 知识要点

  1. 用户认证系统中的用户模型类,是通过全局配置项 AUTH_USER_MODEL 决定的。
  2. 如果迁移自定义用户模型类,必须先配置 AUTH_USER_MODEL

用户注册业务实现

用户注册业务逻辑分析

1. 用户注册业务逻辑分析

用户注册接口设计和定义

1. 设计接口基本思路

  • 对于接口的设计,我们要根据具体的业务逻辑,设计出适合业务逻辑的接口。

  • 设计接口的思路:

    • 分析要实现的业务逻辑:

      • 明确在这个业务中涉及到几个相关子业务。
      • 将每个子业务当做一个接口来设计。
    • 分析接口的功能任务,明确接口的访问方式与返回数据:

      • 请求方法(如GET、POST、PUT、DELETE等)。
      • 请求地址。
      • 请求参数(如路径参数、查询字符串、表单、JSON等)。
      • 响应数据(如HTML、JSON等)。

2. 用户注册接口设计

1.请求方式

选项方案
请求方法POST
请求地址/register/

2.请求参数:表单参数

参数名类型是否必传说明
usernamestring用户名
passwordstring密码
password2string确认密码
mobilestring手机号
sms_codestring短信验证码
allowstring是否同意用户协议

3.响应结果:HTML

  • register.html
响应结果响应内容
注册失败响应错误提示
注册成功重定向到首页

3. 用户注册接口定义

1.注册视图

class RegisterView(View):
    """用户注册"""

    def get(self, request):
        """
        提供注册界面
        :param request: 请求对象
        :return: 注册界面
        """
        return render(request, 'register.html')

    def post(self, request):
        """
        实现用户注册
        :param request: 请求对象
        :return: 注册结果
        """
        pass

2.总路由

urlpatterns = [
    # users
    url(r'^', include('users.urls', namespace='users')),
]

3.子路由

urlpatterns = [
    # 注册
    url(r'^register/$', views.RegisterView.as_view(), name='register'),
]

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

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

相关文章

【网络安全】SSO登录过程实现账户接管

未经许可,不得转载。 文章目录 正文正文 登录页面展示了“使用 SSO 登录”功能: 经分析,单点登录(SSO)系统的身份验证过程如下: 1、启动SSO流程:当用户点击按钮时,浏览器会发送一个GET请求到指定的URL: /idp/auth/mid-oidc?req=[UNIQUE_ID]&redirect_uri=[REDI…

在 Mac 上更改 24小时制时间显示

使用“日期与时间”设置设定或更改 Mac 上的日期和时间。如果日期和时间正确&#xff0c;那么电子邮件、信息和文件上的时间戳也是准确的。了解如何设定日期和时间。 若要更改这些设置&#xff0c;请选取苹果菜单 >“系统设置”&#xff0c;点按边栏中的“通用” &#x…

[星瞳科技]OpenMV使用时有哪些常见错误和解决办法?

常见代码错误 ImportError:no module named xxx 这个错误是Import错误&#xff0c;没有stepper这个模块。 原因&#xff1a; 你没有把stepper.py这个文件拖到你的板子里。见&#xff1a;模块的使用 拖过去之后&#xff0c;需要重启&#xff0c;使模块生效 MemoryError:FB …

Class字节码文件结构

class字节码文件结构 类型名称说明长度数量u4magic魔数,识别Class文件格式4个字节1u2minor_version副版本号(小版本)2个字节1u2major_version主版本号(大版本)2个字节1u2constant_pool_count常量池计数器2个字节1cp_infoconstant_pool常量池表n个字节constant_pool_count-1u2a…

马头拧紧驱动器维修 拧紧控制器故障

马头拧紧控制器作为工业自动化领域不可或缺的重要设备&#xff0c;其稳定运行对于生产线的效率与安全性至关重要。然而&#xff0c;在实际应用中&#xff0c;难免会遇到各种Desoutter拧紧工具控制器故障&#xff0c;影响生产进度和设备性能。 拧紧轴控制器维修 拧紧装置 马头…

ubuntu设置共享文件夹,非虚拟机,服务器版

在Ubuntu中共享文件夹通常可以通过几种不同的方式来实现&#xff0c;比如使用Samba服务、NFS&#xff08;Network File System&#xff09;或者通过虚拟机软件如VirtualBox或VMware的内置共享文件夹功能。这里我假设您是在询问如何在Ubuntu主机上设置一个简单的文件共享服务&am…

MongoDB Redis 快速上手:NoSQL数据库操作精要

先言之 ☘️随着大数据时代的到来&#xff0c;非关系型数据库因其灵活性和扩展性逐渐受到开发者的青睐。MongoDB 和 Redis 作为两种非常流行的 NoSQL 数据库&#xff0c;各自拥有独特的特性和应用场景。MongoDB 是一款面向文档的数据库&#xff0c;适用于需要存储复杂数据结构…

ESP32-C3在MQTT访问时出现“transport_base: Poll timeout or error”问题的分析(2)

接前一篇文章:ESP32-C3在MQTT访问时出现“transport_base: Poll timeout or error”问题的分析(1) 前一篇文章在分析定位笔者所遇MQTT(MQTTs)传输时问题的时候,定位到了问题是出自于components\components\tcp_transport\transport_ssl.c的ssl_write函数。本回开始,就围…

【四】阿伟开始学Kafka

阿伟开始学Kafka 概述 人生若只如初见&#xff0c;阿伟心里回想起了第一次和Kafka见面的场景&#xff0c;记忆虽然已经有些模糊&#xff0c;但是感觉初次见面是美好的。积累了一些实战经验之后&#xff0c;阿伟感觉不能再是面对百度开发了&#xff0c;于是决心系统的学习一下Ka…

liblzma库Android平台编译

1.下载源码: git clone https://github.com/tukaani-project/xz.git --recursive 2.配置交叉编译环境: 生成Android平台makefile export ANDROID_API=25 export ANDROID_NDK=/opt/aarch64-darwin-android export ANDROID_NDK_REVISION=r25b export AR=/opt/aarch64-darwin-a…

李宏毅 机器学习与深度学习【2022版】 01

文章目录 一、基本概念二、深度学习内容总览三、预测YouTube播放量的模型1、假设一个含有未知参数的函数式2、根据Training Data定义一个 Loss3、最优化Optimization4、测试集验证模型性能5、线性模型特征维度提升6、非线性模型7、ReLU 四、深度学习概述1、Fully Connect Feedf…

基于改进YOLOv8的景区行人检测算法

贵向泉, 刘世清, 李立, 秦庆松, 李唐艳. 基于改进YOLOv8的景区行人检测算法[J]. 计算机工程, 2024, 50(7): 342-351. DOI: 10.19678/j.issn.10 原文链接如下&#xff1a;基于改进YOLOv8的景区行人检测算法https://www.ecice06.com/CN/rich_html/10.19678/j.issn.1000-3428.006…

DOM Clobbring个人理解

目录 toString One Level Two Level Three Level More Dom Clobbering&#xff1a;就是⼀种将 HTML 代码注⼊⻚⾯中以操纵 DOM 并最终更改⻚⾯上 JavaScript ⾏为的技术 DOM Clobbering中的操作也是根据JavaScript行为的层级来分为一层、两层、三层和更多 toString 我们…

集合及数据结构第一节————初识集合框架和数据结构

系列文章目录 集合及数据结构第一节————初识集合框架和数据结构 初始集合框架和数据结构 什么是集合框架&#xff1f;集合框架的重要性背后所涉及的数据结构以及算法数据结构的基本概念和术语逻辑结构和物理结构数据类型 文章目录 系列文章目录集合及数据结构第一节——…

机器学习/自主系统与亚当·斯密

人工智能中的机器学习和自主系统是当前科技领域的热门话题&#xff0c;它们与亚当斯密的经济学理论之间可能存在一些潜在的联系和启示。亚当斯密的经济学理论主要关注市场经济的运行和资源分配。他的核心观点是&#xff0c;通过市场机制的作用&#xff0c;个体追求自身利益的行…

算法日记day 41(动归之最长序列问题)

一、最长递增子序列 题目&#xff1a; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0…

一款免费的开源支付网关系统,支持X宝、某信、云闪付等多种支付方式,提供收单、退款、聚合支付、对账、分账等功能(附源码)

前言 在数字化浪潮中&#xff0c;电子-商务和移动支付迅速崛起&#xff0c;支付系统成为企业运营的核心组件。然而&#xff0c;现有支付处理方案常面临成本高、集成复杂、系统耦合度高等挑战。 这些问题不仅增加了企业负担&#xff0c;也制约了业务的快速迭代和创新。市场迫切…

Tomcat的核心文件讲解

参考视频&#xff1a;对应视频 server.xml中的以下部分可修改&#xff1a; 1.connector标签里的port可以修改。--修改端口号 Tomcat默认端口号&#xff1a;8080 <Connector connectionTimeout"20000" maxParameterCount"1000"port"8080" prot…

Mac文件需要分卷压缩怎么办 Mac上怎么解压分卷压缩的文件

在处理大型文件的传输和存储的时候&#xff0c;Mac用户常面临文件大小超过限制的问题。为了有效管理这些大文件&#xff0c;分卷压缩成为一种必不可少的解决方案。Mac文件需要分卷压缩怎么办&#xff1f;Mac上怎么解压分卷压缩的文件&#xff1f;本文将向你介绍如何使用BetterZ…

STM32F103之DMA

DMA简介 DMA&#xff0c;即Direct Memory Access&#xff0c;是一种在无需CPU参与的情况下&#xff0c;将数据在存储器&#xff08;单片机的RAM&#xff09;和外设&#xff08;一般是I/O设备&#xff09;之间高效传输的硬件机制。实现这种功能的集成电路单元叫做DMA Controlle…