#django #django-rest-framework #django-rest-viewsets
#джанго #django-rest-фреймворк #django-отдых-наборы представлений
Вопрос:
У меня есть класс разрешений для моего набора представлений. Но в нем есть несколько операторов if, и операторы if также могут быть добавлены другие, если в набор представлений добавлено какое-либо действие.
Итак, как я могу оптимизировать свой код здесь для повышения производительности ?
def has_permission(self, request, view): user = request.user if view.action in ["update", "partial_update"]: return user.is_manager if view.action == "create": return user.is_creator if view.action in ["list", "retrieve"]: return user.is_viewer if view.action == "destroy": return user.is_admin return False
Здесь разные типы действий с представлением будут выполняться разными типами пользователей.
Комментарии:
1. Единственное сравнение, которое
view.action
содержится во всех допустимых действиях, сделает то, что вы хотите?2. @IainShelvington разные
view.action
выполняются разными типами пользователей в зависимости от роли, поэтому
Ответ №1:
Ваш метод на самом деле хорош, но если вы ищете немного более лаконичный способ, попробуйте это:
def has_permission(self, request, view): user = request.user actions = {"update": user.is_manager, "partial_update": user.is_manager, "create": user.is_creator, "list": user.is_viewer, "retrieve": user.is_viewer, "destroy": user.is_admin} return actions.get(view.action, False)
Ответ №2:
Если ваш код хорошо работает, и вы просто хотите оптимизировать код, это может помочь вам:
def has_permission(self, request, view): if view.action in ["update", "partial_update","list", "retrieve","destroy","create"]: return some_user return False
Комментарии:
1.
some_user
будет отличаться в зависимости от типов действий