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

Javascript 在Django中限制对除主页以外的其他页面的访问,javascript,python,django,Javascript,Python,Django,我正在开发一个Django应用程序。这个应用程序有很多功能。因此,我将每个功能分解为子功能,并在每个应用程序中实现。我使用ajax和javascript在提交表单时在主页上显示结果,而不是重定向到我的子功能应用程序页面 但用户可以通过URL访问子功能应用程序页面。我想限制用户以这种方式访问子功能应用程序页面 这里,让我用我的一个子功能解释一下计算器 我的主页上有每个子功能的模板和所有表单。其中一个子功能是计算器 计算器视图 def index(request): calculated_resul

我正在开发一个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'),
]
urlpatterns = [    
    url(r'^home/', include('home.urls')),   
    url(r'^calculator/', include(('calculator.urls', 'calculator'), namespace='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}`);
              }
        });
    })
})
当用户在主页上提交表单时,该控件转到calculator视图执行计算并在calculator URL中显示,但my js脚本阻止重定向并获取结果并显示在my home page中。用户仍然可以通过URL访问计算器页面,如
网站/calculator/
。我想以这种方式限制访问

项目URL

app_name = 'calculator'
urlpatterns = [  
    url(r'^$', views.index, name='calculator'),
]
urlpatterns = [    
    url(r'^home/', include('home.urls')),   
    url(r'^calculator/', include(('calculator.urls', 'calculator'), namespace='calculator')),
]

我查看了来自Django decorators的登录请求,但没有用,因为我的网站对所有用户开放。

嗨,只需使用视图装饰器

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)


文档是

而不是发布到calculator/,只需发布到home/,然后从URL列表中删除calculator/。然后将计算器视图代码移动到主视图,或者您可以检查该请求是否为GET请求,并在用户尝试转到计算器/使用
if request时将用户重定向到主页。在您的
GET/post
中是否有ajax()
,否则返回404错误非常感谢,这很有帮助。