标签: django-rest-swagger

Django swagger-如何从delete,put方法中禁用DjangoFilterBackend查询过滤器?

我创建了一个AssetsFilter类:

from django_filters import Filter
from django_filters import rest_framework as filters
from django_filters.fields import Lookup

from .models import Assets


class MyListFilter(Filter):
    def filter(self, qs, value):
        value_list = value.split(',')
        return super(ListFilter, self).filter(qs, Lookup(value_list, 'in'))


class AssetsFilter(filters.FilterSet):
    name = filters.CharFilter(lookup_expr='icontains', help_text=u'Filter by name')
    criticality = MyListFilter(name='critical', help_text=u'Filter by_id')

    class Meta:
        model = Assets
        fields = ['name', 'criticality ']
Run Code Online (Sandbox Code Playgroud)

现在我在我的Viewset中使用此过滤器,如下所示:

from .serializers import AssetSerializers
from .filters import AssetsFilter


class AssetViewSet(viewsets.ModelViewSet):
    """
    This viewset automatically provides `list`, `create`, `retrieve`,
    `update` and `destroy` …
Run Code Online (Sandbox Code Playgroud)

python django swagger django-rest-framework django-rest-swagger

13
推荐指数
1
解决办法
1041
查看次数

django_rest_swagger - 'staticfiles' 不是注册的标签库。必须是以下之一:

尝试在 django 2.2.4 中为 django rest 框架自动生成 API 文档时出现此错误,从我在日志中看到的内容来看,它与 {% load staticfiles %} 的弃用有关

templateSyntaxError at /
'staticfiles' is not a registered tag library. Must be one of:
admin_list
admin_modify
admin_urls
cache
countries
i18n
l10n
log
phone
rest_framework
static
tz
Request Method: GET
Request URL:    http://localhost:8000/
Django Version: 3.0
Exception Type: TemplateSyntaxError
Exception Value:    
'staticfiles' is not a registered tag library. Must be one of:
admin_list
admin_modify
admin_urls
cache
countries
i18n
l10n
log
phone
rest_framework
static
tz

{% load i18n …
Run Code Online (Sandbox Code Playgroud)

python django swagger django-rest-swagger

11
推荐指数
4
解决办法
9299
查看次数

Django过滤器后端

我正在使用Django rest framework API,我正在尝试通过first_name或last_name或两者都进行过滤。这是我的ContactViewSet.py

class ContactViewSet(viewsets.ModelViewSet):
    queryset = Contact.objects.all()
    serializer_class = ContactSerializer
    filter_backends = (DjangoFilterBackend, )
    filter_fields = ('first_name', 'last_name')
    lookup_field = 'idContact'
Run Code Online (Sandbox Code Playgroud)

我的DRF设置:

REST_FRAMEWORK = {
    'DEFAULT_FILTER_BACKENDS': ('django_filters.rest_framework.DjangoFilterBackend',),
}
Run Code Online (Sandbox Code Playgroud)

我的actuel请求网址如下所示:

http://localhost:8000/api/v1/contacts/?first_name=Clair&last_name=Test
Run Code Online (Sandbox Code Playgroud)

但是我正在寻找这样的东西:

http://localhost:8000/api/v1/contacts/?first_name=Cl**&last_name=Tes**
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激 ..

python django django-rest-framework django-rest-swagger

7
推荐指数
3
解决办法
8576
查看次数

为 Django REST swagger 和其他问题编辑参数说明

I. 我是使用 Django REST Swagger 编写 API 文档的新手。我试图了解如何编辑 a)“实施说明”和 b) 参数说明。下图 -

在此处输入图片说明

这是我对“崩溃”模型的视图集。

class CrashViewSet(viewsets.ModelViewSet):
"""
retrieve: Get a single Crash instance

list: Get a list of all Crashes
"""
queryset = Crash.objects.all()
serializer_class = CrashSerializer
filter_backends = (SearchFilter,DjangoFilterBackend,OrderingFilter,)
search_fields = ('crash_id','crash_hr_short_desc','urb_area_short_nm','fc_short_desc',
                 'hwy_compnt_short_desc','mlge_typ_short_desc', 'specl_jrsdct_short_desc',
                 'jrsdct_grp_long_desc','st_full_nm','isect_st_full_nm','rd_char_short_desc',
                 'isect_typ_short_desc','crash_typ_short_desc','collis_typ_short_desc',
                 'rd_cntl_med_desc','wthr_cond_short_desc','rd_surf_short_desc','lgt_cond_short_desc',
                 'traf_cntl_device_short_desc','invstg_agy_short_desc','crash_cause_1_short_desc',
                 'crash_cause_2_short_desc','crash_cause_3_short_desc','pop_rng_med_desc','rd_cntl_med_desc')
filter_fields = ('ser_no','cnty_id','alchl_invlv_flg','crash_day_no','crash_mo_no','crash_yr_no','crash_hr_no',
                'schl_zone_ind','wrk_zone_ind','alchl_invlv_flg','drug_invlv_flg','crash_speed_invlv_flg',
                'crash_hit_run_flg',)
ordering_fields = '__all__'
Run Code Online (Sandbox Code Playgroud)

我对 DocString 进行了一些编辑,但不太明白如何继续以获得对端点及其字段的更全面描述。我尝试阅读Django REST Swagger 教程,但没有得到有关如何格式化 DOCSTRING 的任何指导。做到这一点的最佳方法是什么?


二、另一个小问题是我想去掉“Django 登录”按钮,因为这是公共 API。我该怎么做呢?在此处输入图片说明


三、API 文档有哪些最佳实践?

django django-rest-framework django-rest-swagger

7
推荐指数
0
解决办法
281
查看次数

Json模式django rest框架,将json字段描述为json而不是字符串

我在DRF中有一个Api,用张扬地描述。在我的序列化器中,我有一个像这样的字段:

settings = serializers.DictField(child=serializers.JSONField())
Run Code Online (Sandbox Code Playgroud)

在swagger.json中,该字段是否可能被描述为“ Json”而不是字符串:

"additionalProperties": {
            "type": "string"
}
Run Code Online (Sandbox Code Playgroud)

"additionalProperties": {
        "type": "JSON"
}
Run Code Online (Sandbox Code Playgroud)

jsonschema django-rest-framework django-rest-swagger

7
推荐指数
1
解决办法
117
查看次数

如何覆盖get_swagger_view以使django-rest-swagger显示所有端点?

默认情况下,django-rest-swagger显示不需要身份验证的视图(在这种情况下为JWT Auth)。我试图get_swagger_view通过添加IsAuthenticated权限类以包括也需要身份验证的视图来覆盖默认快捷方式。但是这次我访问渲染的文档后,No operations defined in spec!

如何同时显示需要身份验证和不需要身份验证的视图。

django swagger-2.0 django-rest-swagger

6
推荐指数
1
解决办法
293
查看次数

Django Swagger和JSON API呈现问题

使用django-rest-framework-json-api我能够创建API端点,如文档中所述.尝试使用API​​文档django-rest-swagger并不容易.

1:Swagger使用media_type = 'application/json'JSON API不支持的.为了解决这个问题,我创建了第二个渲染类(renderer_classes),它为JSON API提供子类JSONRenderer并强制使用媒体类型.

现在终点支持application/json并且application/vnd.api+jsonswagger很乐意在JSON API文档结构中呈现.意识到生成的curl请求没有标准的JSON API标头.

2:Swagger与解析器有同样的问题.虽然第1期的工作确实有效,但仍存在次要挑战.Swagger呈现字段名称的平面字典,该字典不是JSON API,最终由DRF请求.

是否有可能在JSON API中进行解析?目前,Swagger没有为PUT或POST工作.

djangorestframework-jsonapi==2.2.0
djangorestframework==3.5.4
Django==1.11.2
coreapi==2.3.1
python 3.6
Run Code Online (Sandbox Code Playgroud)

django django-swagger django-rest-swagger

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

在 Swagger 中添加 GET 参数

在方法文档中使用django Rest Frameworkdjango-rest-swagger它没有显示可用的 GET 参数,问题是我该如何设置?

代码:

# views.py
@api_view(['GET'])
def tests_api(request):
    """

    :param request:
    :return:
    """
    id = request.query_params.get('id')
    name = request.query_params.get('name')

    return Response({'user': name, 'text': 'Hello world'})

# urls.py
urlpatterns = [
    url(r"^api/v1/tests_api/$", tests_api),
]
Run Code Online (Sandbox Code Playgroud)

http API:

GET https://127.0.0.1/api/v1/tests_api/?name=Denis&id=3

HTTP/1.1 200 OK
...
{
    "user": "Denis",
    "text": "Hello world"
}
Run Code Online (Sandbox Code Playgroud)

现在: 在此输入图像描述 例子: 在此输入图像描述

俄语版本。

django django-rest-framework swagger-ui django-rest-swagger

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

将枚举渲染为 django-rest-swagger 中的下拉列表

我正在尝试获取django-rest-swagger生成的 swagger 文档中显示的正确查询参数

from rest_framework.filters import BaseFilterBackend
from rest_framework.compat import coreapi, coreschema
from django.utils.encoding import force_text
from django.utils.translation import ugettext_lazy as _

from enum import Enum

class MyChoices(Enum):
    ONE = 'ONE'
    TWO = 'TWO'

class KeyFilter(BaseFilterBackend):

    key_param = 'key'
    default_key = 'psc'
    key_title = _('Key')
    key_description = _('Specify the aggregation key.')

    def filter_queryset(self, request, queryset, view):
        key = request.query_params.pop(self.key_param, [self.default_key])[0]
        return ConsumptionAggregate(queryset).aggregate(key)

    def get_schema_fields(self, view):
        assert coreapi is not None, 'coreapi must be installed to use `get_schema_fields()`'
        assert coreschema …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework django-rest-swagger

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

如何在 Django Rest swagger 中传递 post 参数?

我已将 swagger 与 django Rest 框架集成,但 swagger 文档没有创建输入框来发布发布请求的数据。

我正在使用基于函数的视图和装饰器(@api_view)

@api_view(['GET','POST'])
@permission_classes((AllowAny, ))
@renderer_classes([OpenAPIRenderer, SwaggerUIRenderer])
def preferences(request,format=None):
    try:
             "logic starts here "
Run Code Online (Sandbox Code Playgroud)

在 urls.py 中我添加了:

  schema_view = get_swagger_view(title='API')         
  path('', schema_view, name="schema_view"),
Run Code Online (Sandbox Code Playgroud)

在设置.py中:

SWAGGER_SETTINGS = {
'USE_SESSION_AUTH': False,
'JSON_EDITOR': True,
'api_version': '0.1',
'enabled_methods': [
    'GET',
    'POST',
],
'SECURITY_DEFINITIONS': {
    "api_key": {
        "type": "apiKey",
        "name": "Authorization",
        "in": "header"
    },
},
Run Code Online (Sandbox Code Playgroud)

}

但是,当我打开 api url 时,我得到类似这样的信息(如图所示),我无法通过 post 传递参数api点击url的截图

这里可能有什么问题?还有其他需要做的改变吗?

django django-rest-framework django-rest-swagger

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