【问题标题】:Django - Disable authenticator for specific urls in urls.py?Django - 为 urls.py 中的特定 url 禁用身份验证器?
【发布时间】:2021-10-24 10:42:11
【问题描述】:

所以我有一个带有 Swagger 的 Django 应用程序,但我还使用自动向每个端点添加了一个自定义身份验证器

settings.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'cheers.utils.authenticator.CognitoAuthentication',
    ),
}

urls.py

schema_view = get_schema_view(
    openapi.Info(
        title="Resource API",
        default_version="v1",
        description="A sample API for resource with DRF",
        terms_of_service="https://www.google.com/policies/terms/",
        contact=openapi.Contact(email="cheersocialinc@gmail.com"),
        license=openapi.License(name="BSD License"),
    ),
    public=True,
    permission_classes=(
        permissions.AllowAny,),  # Anyone have access to API documentation
)

if settings.DEBUG:
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
    urlpatterns += ADMIN_URLS
    urlpatterns += SWAGGER_URLS

如何为 swagger 和 admin url 关闭此功能?我不确定的原因是因为 Swagger 和 admin 已添加到 URL,它不是视图

urls.py

如何禁用 Swagger 的自动身份验证?
另外我想还有一个问题是当debugFalse 时如何禁用这个URL

【问题讨论】:

    标签: django django-rest-framework swagger


    【解决方案1】:

    禁用身份验证 |对 swagger url 的权限,在 get_schema_view 中设置 permission_classes,如下所示:

    urls.py

    from django.urls import path
    from rest_framework import permissions
    from rest_framework.schemas import get_schema_view
    from django.conf import settings
    
    schema_view = get_schema_view(
        openapi.Info(
            title="Resource API",
            default_version="v1",
            description="A sample API for resource with DRF",
            terms_of_service="https://www.google.com/policies/terms/",
            contact=openapi.Contact(email="your_email@yopmail.com"),
            license=openapi.License(name="BSD License"),
        ),
        public=True,
        permission_classes=(
        permissions.AllowAny, ),  # Anyone have access to API documentation
    )
    
    if settings.DEBUG == False
        # urlpatterns
        urlpatterns = [
            # Production urls only
        ]
    else:
        urlpatterns = [
            # Production urls + swagger doc urls
            path(
            'doc/',
            schema_view.with_ui('swagger', cache_timeout=0),
            name='schema-swagger-ui'),
        ]
    

    对于没有身份验证的 Django 管理员,请关注this post

    【讨论】:

    • hmmm 我已经有了你设置的schema_view,但它似乎仍然在否认
    猜你喜欢
    • 1970-01-01
    • 2019-05-31
    • 2018-06-15
    • 2018-08-04
    • 2017-11-17
    • 1970-01-01
    • 2020-10-20
    • 2017-01-23
    • 2019-02-26
    相关资源
    最近更新 更多