Django项目用户部分模块

用户模型类的创建

首先:Django中的认证系统提供了的用户模型类和方法很方便,我们可以使用这个模型类,对于没有的字段就需要额外添加。

Django提供了认证系统,可以同时处理认证和授权。
Django的认证系统包含有:

  1. 用户
  2. 权限:用二元标志来指示一个用户是否可以做一个特定的任务。
  3. 组:对多个用户运用标签和全新的一种通用的方式。
  4. 一个可配置的密码哈希系统
  5. 用户登录或内容显示的表单和视图
  6. 一个可插拔的后台系统

Django认证系统提供了用户模型类User保存用户的数据,默认的User包含一下常见的基本字段:

  1. username:用户名

  2. first_name:(可选)

  3. last_name:(可选)

  4. email:(可选)

  5. password:密码(Django不保存原始密码)

  6. is_staff:布尔值,指示用户是否可以访问Admin站点

  7. date_joined:账户创建时间

  8. last_login:用户最后一次登录的时间

    常用的方法:

  9. set_password(raw_password):设置用户的密码

  10. check_password(raw_password):如果给定的raw_password是用户的真实密码,则放回True,可以在检验用户密码时使用。

开始创建
Django提供了django.contrib.auth.models.AbstractUser用户抽象模型类允许我们继承,扩展字段来使用Django认证系统的用户模型类。
所以

  • 先导入AbstractUser,在创建用户模型类的时候继承它。
  • 在模型类中添加额外需要的字段
  • 在配置文件中进行设置,不然系统不知道按照认证系统的模型类去创建。
AUTH_USER_MODEL = 'users.User'
  • 执行数据库迁移,注意:一定要在AUTH_USER_MODEL配置到后再迁移。

注册业务接口分析

接口设计的思路

  • 分析要实现的业务逻辑,明确在这个业务中需要涉及到几个相关子业务,将每个子业务当做一个接口来设计。
  • 分析接口的功能任务,明确接口的访问方式与返回数据:
    比如:
  1. 接口的请求方式,如GET 、POST 、PUT等
  2. 接口的URL路径定义
  3. 需要前端传递的数据及数据格式(如路径参数、查询字符串、请求体表单、JSON等)
  4. 返回给前端的数据及数据格式

分析在用户注册中,需要实现以下接口:

  • 图片验证码
  • 短信验证码
  • 用户名判断是否存在
  • 手机号判断是否存在
  • 注册保存用户数据
    其中图片验证码和短信验证码考虑后续业务也会用到,故创建一个新应用verifications,在此应用中实现图片验证码、短信验证码。

图片验证码

实现逻辑:

  1. 将验证码图片返回前端
  2. 将正确内容保存到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命令。

猜你喜欢

转载自blog.csdn.net/weixin_43269166/article/details/88370260
今日推荐