前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第一季 | Django REST 自定义用户登录

第一季 | Django REST 自定义用户登录

作者头像
小团子
发布2020-04-08 10:53:10
1.3K0
发布2020-04-08 10:53:10
举报
文章被收录于专栏:数据云团数据云团

Django REST框架构建Web API。Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。

试着修改用手机短信验证码登录

可以自定义用户登录

在登录需求中常见的手机验证码如何实现,原有的 obtain_jwt_token 方法中只能用户名和密码。自定义的登录中可以使用 serializers 序列化器,基于 Models 自动创建一个 Serializer 类,其中的字段与模型类字段对应,这就是 ModelSerializer 类提供的快捷方式。

代码语言:javascript
复制
from rest_framework import serializers

ModelSerializer 类会根据模型自动生成一组字段;自动为序列化生成验证器;同时还包含 .create() 和 .update() 的简单默认实现方法。

再来看下第一季都有哪些可以回顾和用得上的小技能

1.users 应用下创建 serializers.py 文件

代码语言:javascript
复制
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 文件中添加

小技巧补充

代码语言:javascript
复制
from django.http import JsonResponse

封装响应内容

生成 token

代码语言:javascript
复制
from rest_framework_jwt.serializers import jwt_encode_handler, jwt_payload_handler
代码语言:javascript
复制
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 文件中添加验证字段或自定义验证方法。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据云团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档