我创建了一个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
尝试在 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) 我正在使用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)
任何帮助,将不胜感激 ..
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 文档有哪些最佳实践?
我在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) 默认情况下,django-rest-swagger显示不需要身份验证的视图(在这种情况下为JWT Auth)。我试图get_swagger_view通过添加IsAuthenticated权限类以包括也需要身份验证的视图来覆盖默认快捷方式。但是这次我访问渲染的文档后,No operations defined in spec!
如何同时显示需要身份验证和不需要身份验证的视图。
使用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 Rest Framework和django-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-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) 我已将 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 传递参数
这里可能有什么问题?还有其他需要做的改变吗?