我正在尝试使用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 DRF进行注册:
请说明使用 ViewSet 和泛型的区别。
这些是我的尝试。
我来自Flask,发现使用装饰器定义多个端点非常清楚。
@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)
@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的好处。
请帮忙举个例子来获取用户列表和最后一个用户。
# serializer.py
from rest_framework import serializers
from .models import Person
class PersonSerializer( serializers.HyperlinkedModelSerializer): …Run Code Online (Sandbox Code Playgroud)