python - django rest framework swagger 未映射所有 url
问题描述
我已经实现了Django-rest-swagger来记录我的 API,但是 swagger UI 没有显示所有 URL。
当我在我的视图中添加了permission_classes = [AllowAny]然后在 swagger UI 上显示 URL,但是这次所有用户都将连接到我的数据库,我不希望这种情况发生。我想要这样,当用户登录时,然后获取JWT 令牌,然后,单击授权按钮,然后大摇大摆地访问我的 API。
如何在我的招摇 UI 上正确实现 JWT Bearer 身份验证?
django-rest-swagger-2.1.1
djangorestframework 版本:3.9.0
Django 版本:2.2.3
设置:
SWAGGER_SETTINGS = {
'LOGIN_URL': 'rest_framework:login',
'LOGOUT_URL': 'rest_framework:logout',
'USE_SESSION_AUTH': False,
'DOC_EXPANSION': 'list',
'APIS_SORTER': 'alpha',
'JSON_EDITOR': False,
'api_version': '0.1',
'SUPPORTED_SUBMIT_METHODS': [
'get',
'post',
],
'SECURITY_DEFINITIONS': {
"api_key": {
"type": "apiKey",
"name": "Authorization",
"in": "header",
"description": "JWT authorization"
},
},}
网址.py:
schema_view = get_swagger_view(title='Unite.Ad Api')
router = routers.SimpleRouter()
router.register(r'company', CompanyViewSet, basename="company")
router.register(r'brands', BrandsViewSet, basename="company_brands")
router.register(r'brand-categories', BrandCategoriesViewSet, basename="company_brand_categories")
router.register(r'customer-representative', CustomerRepresentativeViewSet, basename="customer_representative")
router.register(r'sectors', SectorViewSet, basename="company_sectors")
router.register(r'brief', BriefViewSet, basename="briefs")
router.register(r'brief-categories', BriefCategoriesViewSet, basename="briefs-categories")
router.register(r'country', CountryViewSet, basename="country")
router.register(r'province', ProvinceViewSet, basename="province")
urlpatterns = [
path('', schema_view),
path('', include(router.urls)),
path('admin/', admin.site.urls),
path('user/register/', RegistrationView.as_view()),
path('user/login/', AuthTokenViewSet.as_view()),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework')),
path('api-token-auth/', obtain_jwt_token),
path('api-token-verify/', verify_jwt_token),
]
公司视图集.py:
class CompanyViewSet(ModelViewSet):
"""
retrieve:
Return the given company.
list:
Return a list of logged user company and search with name.
create:
Create a new company.
destroy:
Delete a company.
update:
Update a company.
partial_update:
Update a company.
"""
queryset = Company.objects.all()
filter_class = CompanyFilter
serializer_class = CompanySerializer
permission_classes = [IsAuthenticated]
def get_queryset(self):
if self.request.user.is_authenticated and self.request.user.is_active:
return Company.objects.filter(companyUser__exact=self.request.user)
else:
return Company.objects.all()
解决方案
推荐阅读
- javascript - 我正在制作绘图工具。怎么画的时候画的还行,但是画完allot之后松手,重新开始画,真的很慢
- php - MongoDB 通过 SSL 连接:我做错了什么?
- javascript - svg标签内的Javascript
- ios - 我是否需要个人 Apple 开发者帐户才能发布与我的公司帐户不同的应用程序?
- html - 羽毛笔编辑器 - 焦点
- ios - 有没有比这更好的方法在通知附件中使用来自 Assets.xcassets 的图像?
- ios - PDFKit 交换注释的内容
- elasticsearch - 为什么双字段的 Sum 有超过 2 个小数位
- python - Heroku 上的错误请求 400 Django 应用程序
- php - 使用 Laravel 5.6 在同一页面上登录和注册?