Django REST框架构建Web API。Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
试着修改用手机短信验证码登录
可以自定义用户登录
在登录需求中常见的手机验证码如何实现,原有的 obtain_jwt_token 方法中只能用户名和密码。自定义的登录中可以使用 serializers 序列化器,基于 Models 自动创建一个 Serializer 类,其中的字段与模型类字段对应,这就是 ModelSerializer 类提供的快捷方式。
from rest_framework import serializers
ModelSerializer 类会根据模型自动生成一组字段;自动为序列化生成验证器;同时还包含 .create() 和 .update() 的简单默认实现方法。
再来看下第一季都有哪些可以回顾和用得上的小技能
1.users 应用下创建 serializers.py 文件
from django.contrib.auth import get_user_model, authenticate
from rest_framework import serializers
User = get_user_model()
class UserLoginSerializer(serializers.ModelSerializer):
password = serializers.CharField(allow_blank=True, style={"input_type": "password"}, label="密码",
help_text="密码至少6位及以上")
mobile = serializers.CharField(write_only=True, allow_blank=False, label="手机号", help_text="手机号11位")
def validate(self, attrs):
# print("password", len(attrs["password"]))
if attrs["mobile"] and len(attrs["password"]) > 0:
user = authenticate(username=attrs["mobile"], password=attrs["password"])
if user is not None and user.is_active:
return attrs
else:
raise serializers.ValidationError({"error": "用户不存在"})
else:
return attrs
class Meta:
model = User
fields = ("mobile", "password")
调用 django.contrib.auth.authenticate() 时,认证用户信息。
2.users 应用下的 views.py 文件中添加
小技巧补充
from django.http import JsonResponse
封装响应内容
生成 token
from rest_framework_jwt.serializers import jwt_encode_handler, jwt_payload_handler
def create_token(user):
payload = jwt_payload_handler(user)
# 前端返回的值 token username
token = jwt_encode_handler(payload)
return "JWT " + token
3.users 应用下的 urls.py 文件中添加
登录成功
若需要短信验证码登录,可以在 serializers.py 文件中添加验证字段或自定义验证方法。