1、背景:
继承于django原生的view,在实现的as_view方法中对原生的view做了加强,另外APIView的 request 是基于django的 Request做了加强,不在是原生的request,这一步解析是在drf.APIVIew 的 dispatch方法中完成的,主要是增加了认证以及限流等实现类
2、使用:
view
class BookApiView(APIView):
def get(self,request,*args,**kwargs):
# 此时 request已经不是django原生的,是drf自己定义的,drf除了重写了额as_view 还重写了dispatch 方法 ,在dispatch中对request方法又重写了]
parmers = request.query_params()
books = Book.objects.all()
book_ser = BookModelSerializer(books,many=True)
return Response({"code":500,"data":book_ser.data})
def post(self,request,*args,**kwargs):
ser = BookModelSerializer(data = request.data)
if ser.is_valid():
ser.save()
return Response({"code":1000,"data":ser.data})
model
class Book(models.Model): nid = models.AutoField(primary_key=True) name = models.CharField(max_length=256) # max_digits 总共5位 小数点后2位 price = models.DecimalField(max_digits=5, decimal_places=2) author = models.CharField(max_length=256) def __str__(self): return self.name
ser
class BookModelSerializer(ModelSerializer): class Meta: # 序列化那个表 model = Book # 所有字段全部序列化 fields = "__all__" # 渲染制定字段 #fields = ('name','price') # 排除字段 fields 互斥 #exclude = ("nid",) # 3.2 版本在之后 已经启用extra_kwargs # read_only_fields = ('price') # write_only_fileds = ('name') #后续需要搭配 extra_kwargs 参数指定 不能对id 主建做限制 extra_kwargs = { "price":{ "min_value":0,"required":True,"write_only":True } }
url
urlpatterns = [ path('admin/', admin.site.urls), path('book2/',ap01view.BookApiView.as_view()) ]
标签:ser,models,APIView,request,kwargs,Drf,data,view From: https://www.cnblogs.com/yuan-x/p/16633110.html