rest_framework 学习记录

  1. 如果要对数据库进行增删改查,应该怎么写
 #继承ModelViewSet 就可以对数据库进行增删改查
from rest_framework import viewsets
from rest_framework.viewsets import ModelViewSet,GenericViewSet
class UserViewSet(ModelViewSet):
    serializer_class = UserSerializer 
    queryset = UserProfile.objects.all()

  1. 如果只对数据库进行查询应该怎么写
from rest_framework import generics,mixins,views 
from rest_framework import GenericViewSet
class UserViewSet(mixins.ListModelMixin,GenericViewSet):
	serializer_class = UserSerializer
	queryset = UserProfile.objects.all()
	
  1. 如果只对数据库进行修改应该怎么写
from rest_framework import generics,mixins,views 
from rest_framework import GenericViewSet
class UserViewSet(mixins.UpdateModelMixin,GenericViewSet):
	serializer_class = UserSerializer
	queryset = UserProfile.objects.all()
还有这几个类,可以组合起来用mixins.CreateModelMixin,mixins.RetrieveModelMixin,mixins.UpdateModeMixin,mixins.DestroyModelMixin,mixins.ListModelMixin
url 的配置
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)),
]
  1. 如果要对数据进行验证,应该怎么验证
#用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

  1. 用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
  1. 如果要获取Form表单数据,应该怎么获取

  1. 如果要获取JSON数据,应该怎么获取
  1. 如果要对用户进行权限验证,应该怎么验证
  1. 如果要分页,应该怎么分,有几种分页方式
  1. 如果是两张表的查询,应该怎么解析数据
  1. 如果要在解析数据中,反向生成url,应该怎么生成
  1. 如果要限制访问频率,应该怎么限制
  1. 如果要对版本进行限制,应该怎么做
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值