用户注册
根据用户注册效果图,提取出用户模型类字段,进一步分析出 注册逻辑,并完成主要功能。
用户注册页面效果图
功能
注册逻辑
- 生成页面的图片验证码,需要两种触发方式: 默认执行,点击执行
- 获取输入的用户名
- 利用正则校验用户名的合法性
- 当用户名正则校验通过,向 后端 发送请求,校验 用户名是否重复
- 获取密码
- 利用正则校验密码的合法性
- 获取确认密码
- 校验 确认密码和密码 是否一致
- 获取手机号
- 利用正则校验手机号的合法性
- 当手机号正则校验通过,向 后端 发送请求,校验手机号是否重复
- 获取用户输入的验证码
- 校验验证码是否存在
- 校验是否选择复选框,必须勾选
- 点击注册按钮,将信息提交到后端
用户表设计
用户表: 用户名、密码、手机号
可以自定义模型类,包含这些字段,在真正的项目开发中,不会自己重写一遍,而是继承 django内置的用户模型类: AbstractUser
, 重写自己的字段, 但是需要在 settings.py 中 指明当前的用户模型类
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, verbose_name='手机号')
class Meta:
db_table = 'user_t'
verbose_name = '用户'
verbose_name_plural = verbose_name
def __str__(self):
return self.username
在配置文件中指明使用的模型类
# 指定用户模型类
AUTH_USER_MODEL = 'users.User' # app.模型类
迁移模型类
python manage.py makemigrations users
python manage.py migrate users
用户名重复性校验
API设计
# 用户名传递问题
GET /users/check/username/xxxx/
django
- 主路由匹配,分布式路由匹配
- 通过路由匹配,获取路径中的
用户名
,传递给视图类中的get函数。 - 在处理函数中,根据用户名,进行查询,得到对应的用户数量,结果>0则说明重复,否则不重复。
- 返回结果
- 路由匹配
from django.urls import path
from .views import *
urlpatterns = [
path('check/username/<str:username>/', CheckUsername.as_view()),
]
- 视图接口
from rest_framework.views import APIView
from rest_framework.response import Response
from users.models import *
# Create your views here.
class CheckUsername(APIView):
def get(self, request, username):
"""
1. 用户名格式不正确,返回 404
2. 用户名格式正确,用户名重复,返回 400
3. 用户名格式正确,也不重复,返回 200
"""
# 1. 判断用户名格式
# 要求字母开头,中间为字母、数字、下划线,长度5-16
if not re.find(