Django: разные типы доступа для разных URL - PullRequest
0 голосов
/ 21 февраля 2020

В моем проекте Django я определил свои URL-адреса в файле urls.py, как показано ниже:

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')),   
]

с определением ALLOWED_HOSTS в файле settings.py, и / remote, и / api имеют одинаковый доступ from type, поэтому если ALLOWED_HOSTS равно

ALLOWED_HOSTS = ['*']

, то оба URL-адреса / api и / remote доступны удаленно.

Но если ALLOWED_HOSTS равно:

ALLOWED_HOSTS = ['localhost'] 

Таким образом, URL-адреса / api и / remote не доступны удаленно и доступны только с localhost.

Но что мне нужно является то, что только / удаленные URL-адреса доступны удаленно. И / api должен быть доступен только с локального хоста и не иметь доступа к удаленному У меня есть идея, чтобы достичь этого?

1 Ответ

0 голосов
/ 21 февраля 2020

Вы можете подумать о создании декоратора на ваших представлениях, который будет возвращать статус 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):

Кроме того, я помню для этой цели был модуль , но я не уверен, поддерживает ли он более позднюю Django версию.

...