页面展示:
一、模型类
二、视图页面
1、创建user.app
2、实现注册页面的书写(手机验证码、图形验证码)
三、序列化器页面
四、路由
五、前端页面
# user/model.py #
class User(AbstractUser):
email = models.CharField(max_length=130,null=True)
phone = models.CharField(max_length=30,null=True)
token = models.CharField(max_length=255)
class Meta:
db_table = 'User'
#user/view.py #
class RegisterView(APIView):
def post(self, request):
# 获取参数
username = request.data.get('username')
password = request.data.get('password')
phone = request.data.get('phone')
code = request.data.get('code')
if not all([username, password, phone, code]):
return Response({'code': 4003, 'msg': '参数不全'})
# 逻辑与入库
# 3.1验证手机验证码
redis_cli = get_redis_connection('img_code')
redis_phone_code = redis_cli.get(phone).decode('utf-8')
if int(redis_phone_code) != int(code):
return Response({'code': 4005, 'msg': '参数不正确'})
# 3.2创建用户
ser_obj = UserSerializer(data=request.data)
ser_obj.is_valid()
ser_obj.save()
return Response({'code': 0, 'msg': '成功', 'data': ser_obj.data})
# user/sers.py #
from rest_framework import serializers
from rest_framework_jwt.settings import api_settings
from .models import *
class UserSerializer(serializers.Serializer):
username = serializers.CharField()
password = serializers.CharField()
phone = serializers.CharField()
token = serializers.CharField(read_only=True)
def create(self, data):
user = User.objects.create(**data)
user.set_password(data.get('password'))
# 补充生成记录登录状态的token
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
user.token = token
user.save()
return user
# user/urls.py #
from django.urls import path, include
from user.views import *
urlpatterns = [
path('register/', RegisterView.as_view()),
]
图形验证码
1.1 gongdan/settings.py
中配置缓存
# gongdan/settings.py #
# 图形验证码,存redis 0号库
CACHES = {
"default": {