相关疑难解决方法(0)

具有多个视图集的Django Rest Framework路由器

我正在尝试使用DRF 3.1创建API.我首先使用ModelViewSet创建管理功能并使用DefaultRouter注册这些功能.这非常有效,默认API根视图在浏览器中查看时生成了相应的链接.然后,我使用ReadOnlyModelViewSet为标准用户创建了更多受限制的视图集,当我尝试使用路由器注册这些受限制的视图集时出现问题,因为ReadOnlyModelViewSets似乎覆盖了API根视图上的链接.生成的URL在键入浏览器时似乎有效,但API根视图上的链接并不像我预期的那样

serializers.py

class AdminUnitSerializer(serializers.HyperlinkedModelSerializer):
'''
model serializer for admin users containing all fields

'''

url = HyperlinkedIdentityField(view_name='unit-detail')

class Meta:
    model = Unit
    fields = ('url', 'id', 'name', 'symbol', 'converters_from', 'converters_to')

class UserUnitSerializer(serializers.HyperlinkedModelSerializer):
'''
model serializer for standard users containing restricted set of fields

'''

url = HyperlinkedIdentityField(view_name='unit-detail')

class Meta:
    model = Unit
    fields = ('url', 'id', 'name', 'symbol')
Run Code Online (Sandbox Code Playgroud)

views.py

class AdminUnitViewSet(viewsets.ModelViewSet):
'''
simple viewset providing CRUD operations on unit objects

'''

queryset = models.Unit.objects.all()
serializer_class = serializers.AdminUnitSerializer
permission_classes = …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

9
推荐指数
1
解决办法
2407
查看次数

在 Django DRF 中注册多个路由 - 在 ModelViewSets 或泛型中使用和调用方法

我想了解如何使用Django DRF进行注册:

  • 两个不同的端点,以及
  • 只有一个端点使用自定义字段

请说明使用 ViewSet 和泛型的区别。

这些是我的尝试。

我来自Flask,发现使用装饰器定义多个端点非常清楚。

Flask - 获取对象列表的示例端点,最后一个对象

选项1

@application.route('/people/', endpoint='people')
def people():
   # return a list of people
   pass

@application.route('/last/', endpoint='last_person')
def last_person():
   # return last person
   pass
Run Code Online (Sandbox Code Playgroud)

选项 2

@application.route('/people/', endpoint='people')
def people():
   field = request.args.get('last', None)
   if field:
      # return last person from list of people
   else:
     # return list of people
Run Code Online (Sandbox Code Playgroud)

我理解DRF的好处可能是一致性和阅读文档,但发现很麻烦,希望更清楚地了解如何使用ModelsViewSets和Generics来查看VSflask的好处。

请帮忙举个例子来获取用户列表和最后一个用户。


Django DRF - 第一种方法(ModelViewSet)

# serializer.py
from rest_framework import serializers
from .models import Person

class PersonSerializer( serializers.HyperlinkedModelSerializer): …
Run Code Online (Sandbox Code Playgroud)

python generics django routes django-rest-framework

5
推荐指数
1
解决办法
5374
查看次数

标签 统计

django ×2

django-rest-framework ×2

generics ×1

python ×1

routes ×1