用户模型类的创建
首先:Django中的认证系统提供了的用户模型类和方法很方便,我们可以使用这个模型类,对于没有的字段就需要额外添加。
Django提供了认证系统,可以同时处理认证和授权。
Django的认证系统包含有:
- 用户
- 权限:用二元标志来指示一个用户是否可以做一个特定的任务。
- 组:对多个用户运用标签和全新的一种通用的方式。
- 一个可配置的密码哈希系统
- 用户登录或内容显示的表单和视图
- 一个可插拔的后台系统
Django认证系统提供了用户模型类User保存用户的数据,默认的User包含一下常见的基本字段:
-
username:用户名
-
first_name:(可选)
-
last_name:(可选)
-
email:(可选)
-
password:密码(Django不保存原始密码)
-
is_staff:布尔值,指示用户是否可以访问Admin站点
-
date_joined:账户创建时间
-
last_login:用户最后一次登录的时间
常用的方法:
-
set_password(raw_password):设置用户的密码
-
check_password(raw_password):如果给定的raw_password是用户的真实密码,则放回True,可以在检验用户密码时使用。
开始创建
Django提供了django.contrib.auth.models.AbstractUser用户抽象模型类允许我们继承,扩展字段来使用Django认证系统的用户模型类。
所以
- 先导入AbstractUser,在创建用户模型类的时候继承它。
- 在模型类中添加额外需要的字段
- 在配置文件中进行设置,不然系统不知道按照认证系统的模型类去创建。
AUTH_USER_MODEL = 'users.User'
- 执行数据库迁移,注意:一定要在AUTH_USER_MODEL配置到后再迁移。
注册业务接口分析
接口设计的思路:
- 分析要实现的业务逻辑,明确在这个业务中需要涉及到几个相关子业务,将每个子业务当做一个接口来设计。
- 分析接口的功能任务,明确接口的访问方式与返回数据:
比如:
- 接口的请求方式,如GET 、POST 、PUT等
- 接口的URL路径定义
- 需要前端传递的数据及数据格式(如路径参数、查询字符串、请求体表单、JSON等)
- 返回给前端的数据及数据格式
分析在用户注册中,需要实现以下接口:
- 图片验证码
- 短信验证码
- 用户名判断是否存在
- 手机号判断是否存在
- 注册保存用户数据
其中图片验证码和短信验证码考虑后续业务也会用到,故创建一个新应用verifications,在此应用中实现图片验证码、短信验证码。
图片验证码
实现逻辑:
- 将验证码图片返回前端
- 将正确内容保存到redis中。
访问方式: GET /image_codes/(?P<image_code_id>[\w-]+)/
由于是get请求,将图片ID参数携带在请求url中。而ID的是由前端生成的。
class ImageCodeView(APIView):
"""
图片验证码
"""
def get(self, request, image_code_id):
"""
获取图片验证码
"""
# 生成验证码图片
text, image = captcha.generate_captcha()
redis_conn = get_redis_connection("verify_codes")
redis_conn.setex("img_%s" % image_code_id, constants.IMAGE_CODE_REDIS_EXPIRES, text)
# 固定返回验证码图片数据,不需要REST framework框架的Response帮助我们决定返回响应数据的格式
# 所以此处直接使用Django原生的HttpResponse即可
return HttpResponse(image, content_type="images/jpg")
说明:(先要在配置用文件中配置好redis)django-redis提供了get_redis_connection的方法,通过调用get_redis_connection方法传递redis的配置名称可获取到redis的连接对象,通过redis连接对象可以执行redis命令。