第一季 | UpdateModelMixin 了解下,实现用户信息修改
- 2020 年 4 月 9 日
- 筆記

Django REST框架构建Web API。Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
如何实现修改用户信息
UpdateModelMixin 了解下
UpdateModelMixin 更新视图拓展类,提供 update(request, args, *kwargs)方法,可以快速实现更新一个存在的数据对象;同时也提供 partial_update(request, args, *kwargs) 方法,可以实现局部更新。
from rest_framework.mixins import UpdateModelMixin

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

1.users 应用下的 serializers.py 中添加
获取个人信息


import re import datetime from rest_framework.validators import UniqueValidator from django.conf import settings
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",)
小技巧补充
正则匹配验证邮箱
REGEX_EMAIL = r"^[A-Za-zd]+([-_.][A-Za-zd]+)*@([A-Za-zd]+[-.])+[A-Za-zd]{2,4}$"
2.users 应用下的 views.py 中添加
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 登录接口
url(r"^api-auth/", include("rest_framework.urls", namespace="rest_framework")),




