Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在django中,有没有办法限制用户访问某个url及其所有子url?_Django_Django Views - Fatal编程技术网

在django中,有没有办法限制用户访问某个url及其所有子url?

在django中,有没有办法限制用户访问某个url及其所有子url?,django,django-views,Django,Django Views,我正在编写一个简单的Django应用程序。我有一个索引页和帐户部分,帐户部分只能在用户登录时看到 问题是,account部分有许多“子”URL,如/accounts、/accounts/create、/accounts/update、/accounts/home等 目前,我正在使用login_required decorator和其他一些测试,但是当我在每个视图上编写mixin和decorator时,代码看起来很混乱 有没有一种简单的方法可以阻止用户的url及其所有子项 urlpatterns

我正在编写一个简单的Django应用程序。我有一个索引页和帐户部分,帐户部分只能在用户登录时看到

问题是,account部分有许多“子”URL,如/accounts、/accounts/create、/accounts/update、/accounts/home等

目前,我正在使用login_required decorator和其他一些测试,但是当我在每个视图上编写mixin和decorator时,代码看起来很混乱

有没有一种简单的方法可以阻止用户的url及其所有子项

urlpatterns = [
    path('',views.index_view,name="index"),

    url(r'^login/$', auth_views.LoginView.as_view(template_name='login.html'
    ,form_class=forms.AuthenticationForm), name='login'),
    url(r'^logout/$', auth_views.LogoutView.as_view(), name='logout'),
    path('accounts/',views.SellerRegister.as_view(),name="register_seller"),
    path('accounts/address_create/',views.address_create,name="address_create"),
    path('accounts/register_buyer/',views.register_buyer,name="register_buyer"),

]


需要登录的decorator应该在这里工作

from django.contrib.auth.decorators import login_required

@login_required(login_url='/example url you want redirect/') #redirect when user is not logged in
def myview(request):
    do something
    return something #returns when user is logged in
您也可以在URL.py中使用decorator

from django.contrib.auth.decorators import login_required, permission_required
from django.views.generic import TemplateView

from .views import VoteView

urlpatterns = patterns('',
    (r'^about/', login_required(TemplateView.as_view(template_name="secret.html"))),
    (r'^vote/', permission_required('polls.can_vote')(VoteView.as_view())),
)
如果您使用的是CBV,您可以尝试使用权限混合

from django.contrib.auth.mixins import LoginRequiredMixin

class MyView(LoginRequiredMixin, View):
    login_url = '/login/'
    redirect_field_name = 'redirect_to'

您可以在方法视图的正上方使用@login\u required decorator。我说过我已经在使用它了,我只是不想在所有视图上重复这一行。我想知道是否有一种更简单的方法可以阻止用户访问“accounts”和所有以“accounts”开头的URL。所有子URL的视图都不同。您使用的是基于类的视图还是基于方法的视图?@MazharAli我编辑了我的答案,看看您是否从这些示例中发现任何有用的内容。