首页 > 解决方案 > 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()

标签: pythondjangoauthenticationjwtswagger

解决方案


推荐阅读