前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >第一季 | UpdateModelMixin 了解下,实现用户信息修改

第一季 | UpdateModelMixin 了解下,实现用户信息修改

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

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

如何实现修改用户信息

UpdateModelMixin 了解下

UpdateModelMixin 更新视图拓展类,提供 update(request, args, *kwargs)方法,可以快速实现更新一个存在的数据对象;同时也提供 partial_update(request, args, *kwargs) 方法,可以实现局部更新。

代码语言:javascript
复制
from rest_framework.mixins import UpdateModelMixin

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

1.users 应用下的 serializers.py 中添加

获取个人信息

代码语言:javascript
复制
import re
import datetime
from rest_framework.validators import UniqueValidator
from django.conf import settings
代码语言:javascript
复制
class UserInfoUpdateSerializer(serializers.ModelSerializer):
    """
    修改个人信息
    """
    name = serializers.CharField(required=False, max_length=32,
                                     validators=[UniqueValidator(queryset=User.objects.all(), message="该昵称已经存在")],
                                     error_messages={"max_length": "昵称不能超过32个字符"}, label="昵称", help_text="修改昵称不超过32个字符")
    gender = serializers.IntegerField(required=False, default=1, error_messages={"max_value": "性别类型0或1"}, label="性别", help_text="性别0男/1女")
    birthday = serializers.DateField(required=False, default=datetime.date.today(), label="生日", help_text="生日/年月日")
    mobile = serializers.CharField(required=False, max_length=11,
                                      validators=[UniqueValidator(queryset=User.objects.all(), message="该手机号已经存在")],
                                      error_messages={"max_length": "手机号不能超过11个字符"}, label="手机号",
                                      help_text="修改手机号不超过11个字符")
    email = serializers.CharField(required=False, allow_blank=True, max_length=32,
                                  validators=[UniqueValidator(queryset=User.objects.all(), message="该邮箱已经存在")],
                                  error_messages={"max_length": "邮箱不能超过32个字符"}, label="邮箱", help_text="修改邮箱不超过32个字符")

    def validate_email(self, email):
        if email:
            if not re.match(settings.REGEX_EMAIL, email):
                raise serializers.ValidationError({"error": "邮箱非法"})
        return email

    def update(self, instance, validated_data):
        """
        1.修改个人信息昵称、性别、生日
        2.修改手机号
        3.修改邮箱
        """
        if validated_data.get('name'):
            instance.name = validated_data.get('name', instance.name)
        if validated_data.get('gender'):
            instance.gender = validated_data.get('gender', instance.gender)
        if validated_data.get("birthday"):
            instance.birthday = validated_data.get('birthday', instance.birthday)
        if validated_data.get('mobile'):
            instance.mobile = validated_data.get('mobile', instance.mobile)
        if validated_data.get('email'):
            instance.email = validated_data.get('email', instance.email)
        instance.save()
        return instance

    class Meta:
        model = User
        fields = ("id", "name", "mobile", "email", "gender", "birthday")
        read_only_fields = ("id",)

小技巧补充

正则匹配验证邮箱

代码语言:javascript
复制
REGEX_EMAIL = r"^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$"

2.users 应用下的 views.py 中添加

代码语言:javascript
复制
from rest_framework.authentication import SessionAuthentication
from rest_framework.permissions import IsAuthenticated
from rest_framework_jwt.authentication import JSONWebTokenAuthentication

3.users 应用下的 urls.py 中添加

小技巧补充

rest_framework 登录接口

代码语言:javascript
复制
url(r"^api-auth/", include("rest_framework.urls", namespace="rest_framework")),
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档