Django: Применение полномочий в диспетчере URL?

В моем приложении Django у меня есть определенные полномочия, в которых пользователи нуждаются для доступа к определенным представлениям (использование django.contrib.auth). Это хорошо работает, с помощью @permission_required декоратор на моих функциях представления.

Однако некоторые мои URL решают к представлениям, которые я не записал, такой как встроенное django.contrib.auth.views.password_change, как в следующем urls.py:

urlpatterns = patterns(
 (r'^$', "users.views.index"),
 (r'^password_change/$', 'django.contrib.auth.views.password_change'))

В этом экземпляре я нигде не должен применять мой @permission_required декоратор - или делает меня? Там какой-либо путь состоит в том, чтобы ввести ограничение полномочий на уровне диспетчера URL?

8
задан Manoj Govindan 11 August 2010 в 18:21
поделиться

2 ответа

Можно импортировать функцию, необходимую для входа в систему, и применить ее к общему представлению:

from django.contrib.auth.decorators import login_required
from django.views.generic.simple import direct_to_template
urlpatterns = patterns('',
    (r'^foo/$', login_required(direct_to_template), {'template': 'foo_index.html'}),
    )

как упоминается здесь .

9
ответ дан 5 December 2019 в 10:38
поделиться

Один из подходов - обернуть представления, которые вы не писали.

from django.contrib.auth.views import password_change

@permission_required('my_perm')
def wrapper(*args, **kwargs):
    return password_change(*args, **kwargs)

#URLs
urlpatterns = patterns(
  (r'^$', "users.views.index"),
  (r'^password_change/$', 'wrapper'))
-1
ответ дан 5 December 2019 в 10:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: