DRF-Django rest framework
1. 视图继承示例
1. 项目需求
1. 自定义User表扩展auth的User
新增mobile唯一约束字段;新增icon图片字段
2. 在自定义User表基础上
用 GenericViewSet + CreateModelMixin + serializer 完成User表新增接口(就是注册接口)
(重要提示:序列化类要重写create方法,不然密码就是明文了)
3. 在自定义User表基础上
用 GenericViewSet + RetrieveModelMixin + serializer 完成User表单查(就是用户中心)
4. 在自定义User表基础上
用 GenericViewSet + UpdateModelMixin + serializer 完成用户头像的修改
2. 后台文件编写
1. settings.py
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
AUTH_USER_MODEL = 'homework.UserInfo'
2. url.py
from django.contrib import admin
from django.urls import path,re_path
from homework import views
from rest_framework.routers import SimpleRouter
router=SimpleRouter()
router.register('user',views.UserView)
router.register('userinfo',views.UserReadOnlyView)
urlpatterns = [
]
urlpatterns += router.urls
3. models.py
from django.db import models
'''扩写django自带的auth_user表模型'''
from django.contrib.auth.models import AbstractUser
class UserInfo(AbstractUser):
mobile = models.CharField(max_length=32,unique=True)
icon = models.ImageField(upload_to='head',default='head/default.png')
4. serializer.py
from rest_framework import serializers
from homework.models import UserInfo
from rest_framework.exceptions import ValidationError
class UserModelSerializer(serializers.ModelSerializer):
re_password = serializers.CharField(max_length=18,min_length=3,required=True,write_only=True)
class Meta:
model = UserInfo
fields = ['username','password','mobile','re_password','icon']
extra_kwargs = {
'username': {
'max_length':12,'min_length':3},
'password': {
'write_only': True},
'icon': {
'read_only': True}
}
def validate_mobile(self,data):
if len(data) == 11:
return data
else:
raise ValidationError('手机号不合法')
def validate(self, attrs):