19. 使用drf-nested-routers实现路由嵌套
在django中, 基础的路由配置格式为: urlpatterns = [ path('', views.index), path('products/', generic_api.ProductList.as_view()), path('products/<int:pk>/', generic_api.ProductDetail.as_view())...
在django中, 基础的路由配置格式为: urlpatterns = [ path('', views.index), path('products/', generic_api.ProductList.as_view()), path('products/<int:pk>/', generic_api.ProductDetail.as_view())...
回顾之前的内容, 通过通用视图对接口进行了简化, 最终得到了代码: class ProductList(generics.ListCreateAPIView): serializer_class = ProductSerializer queryset = Product.objects.select_related('collection').all() class...
当REST framework所提供的通用视图不能很好的满足需求是, 也可以创建自定义的通用视图. 以ProductDetail为例, 原始代码如下: class ProdcutDetail(APIView): def get(self, request, product_id): product = get_object_or_404(Product, pk=p...
在之前的代码中, 基本实现了对于Prodcut和Collection的增删改查接口. 但是在API的实现代码中存在着大量几乎相同的代码, 如: # ProductList def get(self, request): queryset = Product.objects.all() serializer = ProductSerializer(query...
在之前的代码中, 所有的请求都是通过python方法来进行处理的, 这会使得项目代码可维护性很差. 在实际应用中, 更多的则是使用视图类来对接口进行封装. store文件夹下创建一个新的 views 包. 创建两个文件products_api.py和collections_api.py 并对之前的视图方法进行重构, 结果如下: # collections_api.py ...
保存数据 对于简单数据的表单, rest framework 提供了很简单的数据保存方式. 比如, 按照之前的内容, 新增一个collection_list视图方法, 用于对Collection进行获取和新增 @api_view(['GET', 'POST']) def collection_list(request): if request.method == 'GET': ...
在客户端发送POST请求至后台时, 需要将其发送的数据转化为python对象, 此时便需要进行反序列化 反序列化的简单实现 基于REST的规范, 获取资源和创建资源应该分别对应同一个URL的GET和POST方法. 所以我们可以直接修改products/路由对应的视图: @api_view(['GET', 'POST']) def product_list(request): ...
之前的序列化对象继承自serializers.Serializer, 功能很强大, 但问题在于重复代码太多. 在Product模型中定义了title = models.CharField(max_length=255) 而在ProductSerializer中则要定义title = serializers.CharField(max_length=255) 几乎一样的代码, 只是类型发...
REST Framework提供了一个JSONRenderer对象, 可以将python的词典对象序列化为json对象. 同时提供了一个Serializer对象, 用于将models转化为python词典. 在storeapp中创建一个serializer.py文件 from rest_framework import serializers class ProductSerial...
REST(Representational State Transfer), 一套客户端与服务器进行交互的规则 Resources 可以理解为能够通过URL访问的对象, 比如Product, Collection等. 比如: http://your.url/products http://your.url/products/1 http://your.url/products/1/r...