Django - какой практический и самый безопасный метод удаления или редактирования записей для зарегистрированных пользователей? - PullRequest
1 голос
/ 11 июня 2011

У меня есть несколько разделов на моем веб-сайте, где только зарегистрированные пользователи могут видеть свои ресурсы.

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

Реальные примеры будут действительно оценены.

1 Ответ

3 голосов
/ 11 июня 2011

Для моего проекта я создал Decorator , который проверял, вошел ли в систему нужный пользователь:

#decorator.py
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse

def same_user_required(func):
    def wrapper(request, user):
        if not request.user.is_authenticated():
            return HttpResponseRedirect(reverse('login-view'))
        if not user == request.user.username:
            return HttpResponseRedirect(reverse('login-view'))
        return func(request, user)
    return wrapper

Затем вы добавляете его к любым представлениям, требующим проверки:

#view_profile.py
from apps.utilities.decorators import same_user_required

@same_user_required
def edit_profile(request, user):

Обратите внимание, что мой URL содержит имя пользователя /profile/edit/<username>, из которого поступает параметр, в представлении edit_profile.

Другой способ - использовать встроенный декоратор Django, user_passes_test (см. Django Book Chap 14 для примера его использования. должен написать тест, а не шаблонный код декоратора.

...