В django, есть ли способ ограничить доступ пользователя к URL-адресу и всем дочерним URL-адресам? - PullRequest
0 голосов
/ 26 октября 2019

Я пишу простое приложение на Django. У меня есть страница индекса и разделы учетных записей, раздел учетных записей можно увидеть только в том случае, если пользователь вошел в систему.

Проблема в том, что в разделе учетных записей есть много дочерних URL-адресов, таких как / account, / account /создать, / account / update, / account / home и т. д. и т. д.

В настоящее время я использую декоратор login_required и некоторые другие тесты, но код выглядит неопрятно, когда я пишу миксины и декораторы в каждом представлении.

Существует ли простой способ заблокировать 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"),

]

1 Ответ

0 голосов
/ 26 октября 2019

Требуется логин, здесь должен работать декоратор.

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

Вы также можете просто использовать декоратор в вашем urls.py

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, вы можете попробовать использовать Permission Mixins.

from django.contrib.auth.mixins import LoginRequiredMixin

class MyView(LoginRequiredMixin, View):
    login_url = '/login/'
    redirect_field_name = 'redirect_to'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...