from django.contrib import admin
from django.urls import path,re_path,include
from users.views import UserViewSet
from rest_framework.routers import DefaultRouter,SimpleRouter
router = SimpleRouter()
router.register(r'users',UserViewSet,basename="user")
urlpatterns = [
re_path(r"^",include(router.urls)),
]
如果要对数据进行验证,应该怎么验证
#用is_valid 进行验证
serializer = CommentSerializer(data={'email': 'foobar', 'content': 'baz'})
serializer.is_valid()
#用validate_<field_name>方法进行验证
from rest_framework import serializers
class BlogPostSerializer(serializers.Serializer):
title = serializers.CharField(max_length=100)
content = serializers.CharField()
def validate_title(self, value):
"""
Check that the blog post is about Django.
"""
if 'django' not in value.lower():
raise serializers.ValidationError("Blog post is not about Django")
return value
#注意:如果<field_name>使用参数在序列化器上声明了your,required=False那么如果不包含该字段,则不会执行此验证步骤
# 对象级验证
# 若要进行任何其他需要访问多个字段的验证,请.validate()向您的Serializer子类添加一个方法。此方法采用单个参数,该参数是字段值的字典。serializers.ValidationError如果有必要,它应该提出一个,或者只是返回经过验证的值。
from rest_framework import serializers
class EventSerializer(serializers.Serializer):
description = serializers.CharField(max_length=100)
start = serializers.DateTimeField()
finish = serializers.DateTimeField()
def validate(self, data):
"""
Check that start is before finish.
"""
if data['start'] > data['finish']:
raise serializers.ValidationError("finish must occur after start")
return data
用serializers 解析数据
# 您可以ModelSerializer像在类上一样,通过在类上声明字段来向上添加额外的字段或覆盖默认字段Serializer
class AccountSerializer(serializers.ModelSerializer):
url = serializers.CharField(source='get_absolute_url', read_only=True)
groups = serializers.PrimaryKeyRelatedField(many=True)
class Meta:
model = Account
#还可以用 fields = ['id', 'account_name', 'users', 'created']
# 还可以用fields= “__all__”
# 排除某个字段 exclude = ['users']
# depth = 1 指定嵌套序列化
#数据经过验证后,保存到数据库
class CreateUserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ['email', 'username', 'password']
extra_kwargs = {'password': {'write_only': True}}
def create(self, validated_data):
user = User(
email=validated_data['email'],
username=validated_data['username']
)
user.set_password(validated_data['password'])
user.save()
return user