base64补充
# base64 变长,可反解
# md5 固定长度,不可反解# base64 编码和解码
import base64
import json
dic={'name':'test','age':18}
dic_str=json.dumps(dic)ret=base64.b64encode(dic_str.encode('utf-8'))
print(ret)# 解码
ret2=base64.b64decode(ret)
print(ret2)
修改头像
1.使用不同序列化对象更新。
2.使用自动分发路由,不用修改路由。
ser.py
from rest_framework import serializers
from api import models
from rest_framework.exceptions import ValidationError
class UserModelSerializer(serializers.ModelSerializer):# 因为在orm表中没用re_password=serializers.CharField(max_length=16,min_length=4,required=True,write_only=True)class Meta:model=models.Userfields=['username','password','mobile','re_password','icon']extra_kwargs={'username':{'max_length':16},'password':{'write_only':True}}def validate_mobile(self, data):if not len(data)==11:raise ValidationError('手机号不合法')return datadef validate(self,attrs):if not attrs.get('password') == attrs.get('re_password'):raise ValidationError('两次密码不一致')attrs.pop('re_password') # 剔除,因为数据库里没有这个re_password字段return attrsdef create(self, validated_data):# attrs.pop('re_password') # 如果上面没有,这里处理# models.User.objects.create(**validated_data) 这个密码不会加密user=models.User.objects.create_user(**validated_data)return userclass UserReadOnlyModelSerializer(serializers.ModelSerializer):class Meta:model=models.Userfields=['username','icon']class UserImgModelSerializer(serializers.ModelSerializer):class Meta:model=models.Userfields=['icon']
views.py
from rest_framework.viewsets import GenericViewSet
from rest_framework.mixins import CreateModelMixin,UpdateModelMixin
from api import models
class RegisterView(GenericViewSet,CreateModelMixin,UpdateModelMixin):queryset = models.User.objects.all()serializer_class = ser.UserModelSerializerdef get_serializer_class(self):print(self.action)if self.action=='create':return ser.UserModelSerializerelif self.action=='retrieve':return ser.UserReadOnlyModelSerializerelif self.action=='update':return ser.UserImgModelSerializer
api/urls.py
from rest_framework.routers import SimpleRouter
from api import viewsrouter=SimpleRouter()
router.register('register',views.RegisterView,'register')urlpatterns = [# path('register/', views.RegisterView.as_view({'post':'creat'})),# path('',include(router.urls)) # 第二种方式
]urlpatterns+=router.urls # 第一种方式