我正在开发Django应用程序。此应用程序具有很多功能。因此,我将每个功能分解为子功能,并在每个单独的应用程序中实现。当提交表单时,我使用了ajax,javascript在我的主页中显示结果,而不是重定向到我的子功能应用程序页面。
但是用户可以通过URL访问子功能应用程序页面。我想限制用户以这种方式访问子功能应用程序页面。
在这里,让我用我的子功能之一解释计算器
我的主页具有每个子功能的模板和所有表单。因此,子功能之一是计算器
计算器视图
def index(request):
calculated_result = do_calculation(request) # claculation logic
return JsonResponse(calculated_result)
分隔符网址
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脚本阻止了重定向并获取结果并显示在我的主页中。用户仍可以通过website/calculator/
之类的URL访问计算器页面。我想以此方式限制访问。
项目网址
urlpatterns = [
url(r'^home/', include('home.urls')),
url(r'^calculator/', include(('calculator.urls', 'calculator'), namespace='calculator')),
]
我从 Django装饰器调查了login_request
,但这没有用,因为我的网站向所有用户开放。
答案 0 :(得分:0)
您好,只需使用视图装饰器
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)
文档为here