Python Django REST框架路由
您好,在为Django rest框架创建一组如下所示的路由时遇到了一些问题。路由是伪代码,可能会发生更改。目前正在使用Django 1.11Python Django REST框架路由,python,django,django-rest-framework,Python,Django,Django Rest Framework,您好,在为Django rest框架创建一组如下所示的路由时遇到了一些问题。路由是伪代码,可能会发生更改。目前正在使用Django 1.11 GET /api/<model>/<id> GET /api/<model>/?select=<feld1>,<feld2>,<feld3>,... GET /api/<model>/?top=20&skip=60 GET /api/<model>/&l
GET /api/<model>/<id>
GET /api/<model>/?select=<feld1>,<feld2>,<feld3>,...
GET /api/<model>/?top=20&skip=60
GET /api/<model>/<id>/<model2> # Where Model2 is also a parameter which can change
GET /api/<model>/?expand=<model2>,<model3>,...
GET /api/<model>/?filter=<filter-string>
GET /api/<model>/?search=<solr-query>
GET/api//
获取/api/?选择=、、、,,,。。。
GET/api/?top=20和skip=60
GET/api//#其中Model2也是一个可以更改的参数
获取/api/?展开=,,。。。
获取/api/?过滤器=
获取/api/?搜索=
除了搜索查询之外,还可以组合这些查询。首先,
?
之后的所有查询都是一个查询字符串,无需为其创建URL。
接下来,最佳实践是在baseurl.py
文件中创建路由api/
在另一个应用程序中,url.py
将是2个URL,如下所示
url(r'^model/(?P<id>[0-9]+)$', view.id_view, name='id'),
url(r'^model/(?P<id>[0-9]+)/(P<model>[\w]+)$', view.id_model_view, name='model')
url(r'^model/(?P[0-9]+)$”,view.id\u view,name='id'),
url(r'^model/(?P[0-9]+)/(P[\w]+)$”,view.id\u model\u view,name='model')
首先,之后的所有内容都是一个查询字符串,无需为其创建URL。
接下来,最佳实践是在baseurl.py
文件中创建路由api/
在另一个应用程序中,url.py
将是2个URL,如下所示
url(r'^model/(?P<id>[0-9]+)$', view.id_view, name='id'),
url(r'^model/(?P<id>[0-9]+)/(P<model>[\w]+)$', view.id_model_view, name='model')
url(r'^model/(?P[0-9]+)$”,view.id\u view,name='id'),
url(r'^model/(?P[0-9]+)/(P[\w]+)$”,view.id\u model\u view,name='model')
settings.py
REST_FRAMEWORK = {
...
'DEFAULT_FILTER_BACKENDS': (
# filter
'django_filters.rest_framework.DjangoFilterBackend',
# order
'rest_framework.filters.OrderingFilter',
# search
'rest_framework.filters.SearchFilter'
),
...
'ORDERING_PARAM': 'ordering',
'SEARCH_PARAM': 'search',
}
views.py
class MessageTemplateViewSet(ModelViewSet):
queryset = MessageTemplate.objects.all()
serializer_class = MessageTemplateListSerializer
permission_classes = (IsPublisherOrReadOnly,)
filter_class = MessageTemplateFilter
ordering_fields = '__all__'
search_fields = ('subject', 'content')
过滤器.py
class MessageTemplateFilter(django_filters.rest_framework.FilterSet):
class Meta:
model = MessageTemplate
fields = {
'publisher': ['exact'],
'subject': ['exact', 'icontains'],
'content': ['exact', 'icontains'],
'is_private': ['exact'],
}
过滤器是由支持的,有了它您就可以实现
GET /api/<model>/<id>
GET /api/<model>/?top=20&skip=60
GET /api/<model>/?filter=<filter-string>
GET /api/<model>/?search=<solr-query>
使用类似于serializer=UserCreateSerializer(数据=数据,字段=('username','password','tel'))
我只知道这些settings.py
REST_FRAMEWORK = {
...
'DEFAULT_FILTER_BACKENDS': (
# filter
'django_filters.rest_framework.DjangoFilterBackend',
# order
'rest_framework.filters.OrderingFilter',
# search
'rest_framework.filters.SearchFilter'
),
...
'ORDERING_PARAM': 'ordering',
'SEARCH_PARAM': 'search',
}
views.py
class MessageTemplateViewSet(ModelViewSet):
queryset = MessageTemplate.objects.all()
serializer_class = MessageTemplateListSerializer
permission_classes = (IsPublisherOrReadOnly,)
filter_class = MessageTemplateFilter
ordering_fields = '__all__'
search_fields = ('subject', 'content')
过滤器.py
class MessageTemplateFilter(django_filters.rest_framework.FilterSet):
class Meta:
model = MessageTemplate
fields = {
'publisher': ['exact'],
'subject': ['exact', 'icontains'],
'content': ['exact', 'icontains'],
'is_private': ['exact'],
}
过滤器是由支持的,有了它您就可以实现
GET /api/<model>/<id>
GET /api/<model>/?top=20&skip=60
GET /api/<model>/?filter=<filter-string>
GET /api/<model>/?search=<solr-query>
使用类似于serializer=UserCreateSerializer(数据=数据,字段=('username','password','tel'))
我只知道这些嗯,是的。那就行了。但我正在考虑使用更优雅的解决方案(路由器)。但是我可以复制粘贴每个模型的URL。那就行了。但我正在考虑使用更优雅的解决方案(路由器)。但是我可以复制粘贴每个模型的URL。