限制访问除Django中的主页以外的其他页面

时间:2018-09-05 07:39:13

标签: javascript python django

我正在开发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,但这没有用,因为我的网站向所有用户开放。

1 个答案:

答案 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