第一季 | UpdateModelMixin 了解下,實現用戶信息修改

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")),