在django中,有没有办法限制用户访问某个url及其所有子url?
我正在编写一个简单的Django应用程序。我有一个索引页和帐户部分,帐户部分只能在用户登录时看到 问题是,account部分有许多“子”URL,如/accounts、/accounts/create、/accounts/update、/accounts/home等 目前,我正在使用login_required decorator和其他一些测试,但是当我在每个视图上编写mixin和decorator时,代码看起来很混乱 有没有一种简单的方法可以阻止用户的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
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我编辑了我的答案,看看您是否从这些示例中发现任何有用的内容。