Я занимаюсь разработкой приложения 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 , но это бесполезно, потому что мой сайт открыт для всех пользователей.