本章内容的补充知识点
导入库的良好顺序:
1.系统库 2.django库 3.自己定义的库(第三方库)
redis缓存数据库的数据调用速度快,但是不利于长时间保存。
mysql用于长时间存储,但是调用比较慢。
session会话存储的内容(以字典的方式存放)放在redis缓存里面,要设置过期时间
用户注册功能
一、用户模型设计
1. 用户表字段分析
- 用户名
- 密码
- 手机号
- 邮箱
2.用户模型设计
django的强大之处在于开发效率高,内置了权限模块之类的很多常用功能。在开始一个新的django项目时,如果权限模块中的User模型不满足项目要求,我们需要扩展或者自定义User模型。
扩展User模型有两种方法:
- 如果你不需要改变数据库存储内容,只是改变行为,那么可以建立有一个基于User模型的代理模型。
- 如果想存储与User模型关联的信息,可以使用OneToOneField到包含其他信息字段的模型。这种one-to-one模型经常被称作Profile模型,因为它可能存储站点用户的非身份验证的相关信息。例如:
from django.contrib.auth.models import User class Employee(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) department = models.CharField(max_length=100)
自定义User模型:
如果不想使用django内置的权限系统,当然你需要自定义用户模型,这种情况不讨论。当然也不建议这么做,django内置权限系统有大的自定义功能扩展,而不是重复造轮子。
开启一个新项目,官方强烈推荐用户自定义用户模型,即是默认的用户模型目前已经足够,但是未来可能会要扩展。
from django.contrib.auth.models import AbstractUser class User(AbstractUser): pass
注意:不要忘记在settings.py中设置AUTH_USER_MODEL
指向它。
一旦已经创立数据库表之后再去修改AUTH_USER_MODEL
,会困难很多,因为它会影响外键和多对多关系。这个改动并不能自动完成,需要手动修复(巨坑)。
3.用户模型代码
根据上面的分析我们的用户模型代码如下:
from django.db import models from django.contrib.auth.models import AbstractUser, UserManager as _UserManager class UserManager(_UserManager): """ 自定义 user manager 修改在使用`python manage.py createsuperuser`命令时 可以提供email """ def create_superuser(self, username, password, email=None, **extra_fields): return super().create_superuser(username=username, password=password, email=email, **extra_fields) class User(AbstractUser): """ add mobile, email_active fields to Django user model. """ mobile = models.CharField(‘手机号‘, max_length=11, unique=True, help_text=‘手机号‘, error_messages={‘unique‘: ‘此手机号码已注册‘}) email_active = models.BooleanField(‘邮箱状态‘, default=False) class Meta: db_table = ‘tb_user‘ # 指定数据库表名 verbose_name = ‘用户‘ # 在admin站点中显示名称 verbose_name_plural = verbose_name # 显示复数 def __str__(self): return self.username # A list of the field names that will be prompted for # when create a user via createsuperuser management command. REQUIRED_FIELDS = [‘mobile‘] # specify manager objects = UserManager()
在settings.py文件中添加如下配置:
# 自定义用户模型 AUTH_USER_MODEL = ‘user.User‘
然后运行命令进行数据库迁移:
# 1. 相当于 在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_initial.py, 但是这个改动还没有作用到数据库文件你可以手动打开这个文件,看看里面是什么 python manage.py makemigrations # 2. 将该改动作用到数据库文件,比如产生table之类 python manage.py migrate
再创建一个管理用户
(tzproject) ~/code/tztz$ python manage.py createsuperuser 用户名: admin 手机号: 158xxxxxxxx Password: Password (again): 密码长度太短。密码必须包含至少 8 个字符。 这个密码太常见了。 Bypass password validation and create user anyway? [y/N]: y Superuser created successfully.
1.设计接口思路
- 分析业务逻辑,明确在这个业务中需要涉及到几个相关子业务,将每个子业务党组欧一个接口来设计
- 分析接口的功能任务,明确接口的访问方式与返回数据:
- 接口的请求方式,如GET,POST,PUT等
- 接口的URL路径定义
- 需要接受的参数及参数格式(如路径参数,查询字符串,请求表单,JSON等)
- 返回的数据及数据格式
2.注册功能分析
- 流程图
- 功能
根据流程图总结注册业务包含如下功能
- 注册页面
- 图片验证码
- 用户名检测是否注册
- 手机号检测是否注册
- 短信验证码
- 注册保存用户数据
因为图片验证码,短信验证码考虑到后续可能会在其他业务中用到,因此将验证码功能独立出来,创建一个新应用verification。
三、图形验证码功能实现
1.接口设计
接口说明:
类目 说明 请求方法 GET url定义 /image_code/
参数格式 查询参数
原文地址:https://www.cnblogs.com/Tmclri/p/11529951.html
时间: 2024-07-30 19:50:04