【问题标题】:Django: different access types for different urlsDjango:不同网址的不同访问类型
【发布时间】:2020-02-21 06:51:32
【问题描述】:

在我的 Django 项目中,我在 urls.py 文件中定义了我的 URL,如下所示:

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^api/', include('page1.urls')),
    url(r'^api/', include('page2.urls')),
    url(r'^remote/', include('registering.urls')),   
]

在 settings.py 文件中定义了 ALLOWED_HOSTS,/remote 和 /api 具有相同的访问类型,所以如果 ALLOWED_HOSTS 是

ALLOWED_HOSTS = ['*']

因此 /api 和 /remote URL 都可以远程访问。

但如果 ALLOWED_HOSTS 是:

ALLOWED_HOSTS = ['localhost'] 

因此 /api 和 /remote URL 都不能远程访问,只能从 localhost 访问。

但我需要的是只有 /remote URL 可以远程访问。并且 /api 应该只能从 localhost 访问,并且不允许从远程访问。 我有什么想法可以实现吗?

【问题讨论】:

    标签: python django localhost django-urls remote-access


    【解决方案1】:

    您可以考虑在视图上创建一个装饰器,根据主机返回 403 状态:

    from django.core.exceptions import PermissionDenied
    
    def host_check():
        def decorator(func):
            def wrapper(request, *args, **kwargs):
                if request.META['HTTP_HOST'] in settings.YOUR_REMOTE_ALLOWED_HOSTS:
                    return func(request, *args, **kwargs)
                raise PermissionDenied()
            return wrapper
         return decorator
    

    在你看来:

    from django.utils.decorators import method_decorator
    from . import 
    
    @method_decorator(host_check, name='dispatch')
    class SomeAPIView(APIView):
    

    另外,我记得有 a module 用于此目的,但我不确定它是否仍然支持最新的 Django 版本。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 2019-04-10
      • 1970-01-01
      • 2021-09-14
      • 1970-01-01
      • 2012-12-04
      相关资源
      最近更新 更多