#django
#django
Вопрос:
Я создаю блог с помощью django. Люди, которые являются владельцами записи в блоге, могут редактировать только запись в блоге. как защитить маршрут? должен ли я создавать пользовательское промежуточное программное обеспечение или есть простой способ
Комментарии:
1. Вопросы с просьбой порекомендовать или найти книгу, инструмент, библиотеку программного обеспечения, учебное пособие или другой сторонний ресурс не по теме для Stack Overflow, поскольку они, как правило, привлекают самоуверенные ответы и спам. Вместо этого опишите проблему и что было сделано на данный момент для ее решения.
2. спасибо, братан. будем иметь это в виду @BearBrown
Ответ №1:
Создайте mixin. Это будет что-то вроде:
class IsOwnerMixin(object):
permission_denied_message = _("You are not the owner of this blog - you cannot edit it")
def dispatch (self, request, *args, **kwargs):
if self.get_object().owner != request.user:
raise PermissionDenied(self.get_permission_denied_message())
return super().dispatch(request, *args, **kwargs)
def get_permission_denied_message(self):
"""
Override this method to override the permission_denied_message attribute.
"""
return self.permission_denied_message
Смотрите документы для получения дополнительной информации:https://docs.djangoproject.com/en/2.2/topics/class-based-views/mixins
Ответ №2:
Вы можете создать mixin для этой цели. Если вы используете функциональные представления, то function decorator может выполнить трюк, в то время как вы можете использовать mixins для представлений на основе классов.
Для понимания, вот пример:
смешивание
class IsPermittedMixin(object):
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated():
//check the permission of the user
return super(IsPermittedMixin, self).dispatch(request, *args, **kwargs)
raise PermissionDenied()
число просмотров
В своих представлениях вы можете использовать этот микс как:
class EditBlog(IsPermittedMixin, View):
//do something
Комментарии:
1. Миксины должны наследоваться от
Python's built-in object
типа. Итак, базовым классом для mixin является тип объекта python по умолчанию. ПроверяяMRO(Method Resolution Order)
наEditBlog
класс, мы можем видеть<class ‘object’>
в нем. Следовательно,IsPermittedMixin
наследуется отobject
суперкласса с помощьюsuper
.