美多商城项目流程(二、用户模块(1))

一、创建模型类

1、创建users应用并注册

进入到apps目录下,执行python ../../manage.py startapp users
在dev.py中的INSTALLED_APPS =写入'users.apps.UsersConfig',

2、创建user类

在users下的models.py中创建,因为AbstractUser类中没有手机号这个属性,本项目需要额外添加该属性

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

3、修改配置

我们自定义的用户模型类还不能直接被Django的认证系统所识别,需要在配置文件中告知Django认证系统使用我们自定义的模型类。

在dev.py中添加
AUTH_USER_MODEL = 'users.User'

4、数据库迁移

python manage.py makemigrations
python manage.py migrate

二、图片验证码接口

1、创建验证应用

图片验证码、短信验证码考虑到后续可能会在其他业务中也用到,因此我们将图片验证码独立,创建一个新应用verifications,在此应用中实现图片验证码、短信验证码。

进入到apps目录下,执行python ../../manage.py startapp verifications
在dev.py中的INSTALLED_APPS =写入'verifications.apps.verificationsConfig',

2、导入第三方包

将图片验证码的包放到项目libs包中,在verifications应用中的view.py中导入

from meiduo_mall.libs.captcha.captcha import captcha
text,image=captcha.generate_captcha()

3、创建redis的二号仓库

 "verify_codes": {
        "BACKEND": "django_redis.cache.RedisCache",
        "LOCATION": "redis://10.211.55.5:6379/2",
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
        }
    }

4、写入缓存

# 将图片验证码写入缓存
conn=get_redis_connection('verify_codes')
conn.setex('img_%s'%image_code_id,300,text)

5、返回图片

from django.http import HttpResponse
# 返回图片验证码
return HttpResponse(image,content_type='images/jpg')    

5、路由匹配

子路由中:
from django.conf.urls import url
from verifications import views
url('^image_codes/(?P<image_code_id>[\w-]+)/$', views.ImageCodeView.as_view()), 

总路由中:
url(r'^', include('verifications.urls')),

6、host设置

前端  www.meiduo.site
后端  api.meiduo.site
编辑/etc/hosts文件,可以设置本地域名
sudo vim /etc/hosts
在文件中增加两条信息
127.0.0.1   api.meiduo.site
127.0.0.1   www.meiduo.site

7、修改settings配置中的ALLOWED_HOSTS

一旦不再使用127.0.0.1访问Django后端,需要在配置文件中修改ALLOWED_HOSTS,增加可以访问后端的域名

ALLOWED_HOSTS = ['api.meiduo.site', '127.0.0.1', 'localhost', 'www.meiduo.site']

三、短信验证码接口

1、定义图片验证码序列化器

在verifications/serializers.py中定义序列化器,用以校验

class ImageCodeCheckSerializer(serializers.Serializer):
    """
    图片验证码校验序列化器
    """
    image_code_id = serializers.UUIDField()
    text = serializers.CharField(max_length=4, min_length=4)

    def validate(self, attrs):
        """
        校验
        """
        image_code_id = attrs['image_code_id']
        text = attrs['text']
        # 查询真实图片验证码
        redis_conn = get_redis_connection('verify_codes')
        real_image_code_text = redis_conn.get('img_%s' % image_code_id)
        if not real_image_code_text:
            raise serializers.ValidationError('图片验证码无效')

        # 删除图片验证码
        redis_conn.delete('img_%s' % image_code_id)

        # 比较图片验证码
        real_image_code_text = real_image_code_text.decode()
        if real_image_code_text.lower() != text.lower():
            raise serializers.ValidationError('图片验证码错误')

        # 判断是否在60s内
        mobile = self.context['view'].kwargs['mobile']
        send_flag = redis_conn.get("send_flag_%s" % mobile)
        if send_flag:
            raise serializers.ValidationError('请求次数过于频繁')

        return attrs

2、生成短信验证码

导入云通讯包,生成短信验证码

3、 验证短信验证码的发送请求的时间

4、将短信验证码写入缓存

5、发送短信验证码

6、celery处理短信异步发送

在项目中创建celery_task包,创建config与main的py文件

四、判断用户名手机号存在接口

猜你喜欢

转载自blog.csdn.net/Uzizi/article/details/81278340
今日推荐