ограничить доступ к другим страницам, кроме домашней страницы в Django - PullRequest
0 голосов
/ 05 сентября 2018

Я занимаюсь разработкой приложения Django. Это приложение имеет много функциональных возможностей. Поэтому я разбил каждую функциональность на подфункцию и реализовал в каждом отдельном приложении. И я использовал ajax, javascript, чтобы отобразить результат на моей домашней странице при отправке формы, вместо перенаправления на страницу приложения со вторыми функциональными возможностями.

Но пользователь может получить доступ к странице приложения подфункции через URL. Я хочу ограничить доступ пользователей к странице приложения подфункции таким способом.

Здесь позвольте мне объяснить с помощью одной из моих подфункций калькулятор

Моя главная страница имеет шаблон и все формы в нем для каждой подфункции. Так что одним из подфункций является калькулятор

просмотр калькулятора

def index(request):
calculated_result = do_calculation(request) # claculation logic
return JsonResponse(calculated_result)

URL-адресата

app_name = 'calculator'
urlpatterns = [  
    url(r'^$', views.index, name='calculator'),
]

мой код JavaScript для получения информации с URL калькулятора и отображения ее на моем домашнем URL

 $(document).ready(function(){
    $('#calc_form').submit(function(event){
      console.log(event);
        event.preventDefault()
        $.ajax({
            url:'/calculator/',
            type:'POST',
            data:$(this).serialize(),
            success:function(response){
                $('#output_box').html(`${response.result}`);
              }
        });
    })
})

Когда пользователь отправляет форму на главной странице, элемент управления переходит в представление калькулятора, выполняет вычисление и отображает его в URL-адресе калькулятора, но мой js-скрипт блокирует перенаправление, получает результаты и отображает их на моей домашней странице. Пользователь по-прежнему может получить доступ к странице калькулятора через URL, например website/calculator/. Я хочу ограничить доступ таким образом.

URL проекта

urlpatterns = [    
    url(r'^home/', include('home.urls')),   
    url(r'^calculator/', include(('calculator.urls', 'calculator'), namespace='calculator')),
]

Я просмотрел login_request из Django decorators , но это бесполезно, потому что мой сайт открыт для всех пользователей.

1 Ответ

0 голосов
/ 05 сентября 2018

Привет, просто используйте вид декоратора

from django.views.decorators.http import require_http_methods

@require_http_methods(["POST"])
def index(request):
    calculated_result = do_calculation(request) # claculation logic
    return JsonResponse(calculated_result)

Если вы войдете в GET, у вас будет ошибка django.http.HttpResponseNotAllowed (405), возвращенная

Документы здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...