Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django REST框架路由_Python_Django_Django Rest Framework - Fatal编程技术网

Python Django REST框架路由

Python 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

您好,在为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>/<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。 接下来,最佳实践是在base
url.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。
接下来,最佳实践是在base
url.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。