Django braces mixin

Все эти миксины контролируют доступ пользователя к данному представлению. Поскольку многие из них расширяют AccessMixin, следующие атрибуты являются общими:

login_url = settings.LOGIN_URL
raise_exception = False
redirect_field_name = REDIRECT_FIELD_NAME
redirect_unauthenticated_users = False

raise_exception Атрибут позволяет для этих сценариев, в случае , если разрешение будет отказано:

  • False (по умолчанию): перенаправляет на предоставленный вид входа в систему.
  • True: поднимает PermissionDenied исключение.
  • Подкласс Exception: поднимает это исключение.
  • Вызываемый: вызывается с request аргументом. Функция должна возвращать a HttpRespons eили StreamingHttpResponse, в противном случае возникает PermissionDenied исключение.

Это делается handle_no_permission, что может быть отменено.

LoginRequiredMixin 
Этот миксин довольно прост и, как правило, является первым унаследованным классом в любом представлении. Если у вас нет аутентифицированного пользователя, нет необходимости идти дальше. Если вы использовали Django раньше, вы, вероятно, знакомы с login_required декоратором. Этот миксин копирует функциональность декоратора.

Заметка
Начиная с версии 1.0, LoginRequiredMixin был переписан так, чтобы вести себя как остальные access миксины. Он теперь принимает login_url, redirect_field_name и raise_exception.
Заметка
Это должен быть самый левый миксин в представлении, кроме как в сочетании с 1CsrfExemptMixin - который в этом случае должен быть самым левым миксином.

 

from django.views.generic import TemplateView

from braces.views import LoginRequiredMixin


class SomeSecretView(LoginRequiredMixin, TemplateView):
    template_name = "path/to/template.html"

    #optional
    login_url = "/signup/"
    redirect_field_name = "hollaback"
    raise_exception = True

    def get(self, request):
        return self.render_to_response({})

Необязательный атрибут класса redirect_unauthenticated_users может быть установлен на, True если вы используете другой access миксин с raise_exception установленным на True. Это перенаправит на страницу входа в систему, если пользователь не аутентифицирован, но вызовет исключение, если у него есть, но у него нет необходимого доступа, определенного другими миксинами. Это по умолчанию False.

PermissionRequiredMixin 
Этот миксин был первоначально написан Даниэлем Соколовским ( код здесь ), но эта версия устраняет ненужный рендер, если проверка разрешений не удалась.

Вместо того, чтобы перегружать метод отправки вручную для каждого представления, которое должно проверять наличие разрешения, используйте этот миксин и установите permission_required атрибут класса в своем представлении. Если вы не укажете permission_required свое мнение, возникает ImproperlyConfigured исключение, напоминающее, что вы его не установили. Если вам нужно применить права к данному объекту, установите для object_level_permissions атрибута значение True.

Единственным ограничением этого миксина является то, что он может принимать только одно разрешение. Если вам нужно несколько разрешений, используйте MultiplePermissionsRequiredMixin .

При обычном использовании этого миксина сначала идет LoginRequiredMixin , а затем PermissionRequiredMixin. Если пользователь не является аутентифицированным пользователем, нет смысла проверять какие-либо разрешения.

Заметка
Если вы используете встроенную систему аутентификации Django, superusers автоматически получите все разрешения в вашей системе.
from django.views.generic import TemplateView

from braces import views


class SomeProtectedView(views.LoginRequiredMixin,
                        views.PermissionRequiredMixin,
                        TemplateView):

    permission_required = "auth.change_user"
    template_name = "path/to/template.html"

 

PermissionRequiredMixinТакже предлагает check_permissions метод , который должен быть преодолен , если вам нужны пользовательские разрешения проверки.

MultiplePermissionsRequiredMixin 
Это MultiplePermissionsRequiredMixin более мощная версия PermissionRequiredMixin . Этот миксин представления может обрабатывать несколько разрешений, устанавливая обязательный permissions атрибут как dict с ключами any и / или all списком или набором разрешений. all Ключ требует , request.user чтобы все из указанных разрешений. any Ключ требует , request.user чтобы по крайней мере один из указанных разрешений. Если вам нужно проверить только одно разрешение, то PermissionRequiredMixin - лучший выбор.

Заметка
Если вы используете встроенную систему аутентификации Django, superusers автоматически получите все разрешения в вашей системе.
from django.views.generic import TemplateView

from braces import views


class SomeProtectedView(views.LoginRequiredMixin,
                        views.MultiplePermissionsRequiredMixin,
                        TemplateView):

    #required
    permissions = {
        "all": ("blog.add_post", "blog.change_post"),
        "any": ("blog.delete_post", "user.change_user")
    }

 

MultiplePermissionsRequiredMixinТакже предлагает check_permissions метод , который должен быть преодолен , если вам нужны пользовательские разрешения проверки.

GroupRequiredMixin 
Новое в версии 1.2.

GroupRequiredMixin Гарантирует , что запрашивающий пользователь находится в группе или группах , указанная. Это представление mixin может обрабатывать несколько групп, устанавливая обязательный group_required атрибут в виде списка или кортежа.

Заметка
Миксин предполагает, что вы используете стандартную групповую модель Django и что ваша пользовательская модель обеспечивает groups связь ManyToMany. Если это не так, вам нужно переопределить check_membership миксин для обработки вашей пользовательской настройки.

Стандартное использование Django 

from django.views.generic import TemplateView

from braces.views import GroupRequiredMixin


class SomeProtectedView(GroupRequiredMixin, TemplateView):

    #required
    group_required = u"editors"

Multiple Groups Possible Usage

from django.views.generic import TemplateView

from braces.views import GroupRequiredMixin


class SomeProtectedView(GroupRequiredMixin, TemplateView):

    #required
    group_required = [u"editors", u"admins"]

Custom Group Usage

from django.views.generic import TemplateView

from braces.views import GroupRequiredMixin


class SomeProtectedView(GroupRequiredMixin, TemplateView):

    #required
    group_required = u"editors"

    def check_membership(self, group):
        ...
        # Check some other system for group membership
        if user_in_group:
            return True
        else:
            return False

Dynamically Build Groups

from django.views.generic import TemplateView

from braces.views import GroupRequiredMixin


class SomeProtectedView(GroupRequiredMixin, TemplateView):
    def get_group_required(self):
        # Get group or groups however you wish
        group = 'secret_group'
        return group

UserPassesTestMixin 
Новое в версии 1.3.0.

Mixin, который переопределяет декоратор user_passes_test . Это полезно для гораздо более сложных случаев, чем проверка пользователя is_superuser (например, если его электронная почта от определенного домена).

from django.views.generic import TemplateView

from braces.views import UserPassesTestMixin


class SomeUserPassView(UserPassesTestMixin, TemplateView):
    def test_func(self, user):
        return (user.is_staff and not user.is_superuser
                and user.email.endswith(u"mydomain.com"))

SuperuserRequiredMixin 
Еще один миксин на основе разрешений. Это специально для требования пользователя быть суперпользователем. Полезно для инструментов, к которым должны иметь доступ только привилегированные пользователи.

from django.views.generic import TemplateView

from braces import views


class SomeSuperuserView(views.LoginRequiredMixin,
                        views.SuperuserRequiredMixin,
                        TemplateView):

    template_name = u"path/to/template.html"

AnonymousRequiredMixin 
Новое в версии 1.4.0.

Mixin, который перенаправит аутентифицированных пользователей в другое представление. По умолчанию перенаправление выполняется в настройках Django.LOGIN_REDIRECT_URL .

Статические примеры 

from django.views.generic import TemplateView

from braces.views import AnonymousRequiredMixin


class SomeView(AnonymousRequiredMixin, TemplateView):
    authenticated_redirect_url = u"/send/away/"
from django.core.urlresolvers import reverse_lazy
from django.views.generic import TemplateView

from braces.views import AnonymousRequiredMixin


class SomeLazyView(AnonymousRequiredMixin, TemplateView):
    authenticated_redirect_url = reverse_lazy(u"view_url")

Динамический пример

from django.views.generic import TemplateView

from braces.views import AnonymousRequiredMixin


class SomeView(AnonymousRequiredMixin, TemplateView):
    """ Redirect based on user level """
    def get_authenticated_redirect_url(self):
        if self.request.user.is_superuser:
            return u"/admin/"
        return u"/somewhere/else/"

StaffuserRequiredMixin 
Подобно SuperuserRequiredMixin , этот миксин позволяет запрашивать пользователя с is_staff установленным значением True.

from django.views.generic import TemplateView

from braces import views


class SomeStaffuserView(views.LoginRequiredMixin,
                        views.StaffuserRequiredMixin,
                        TemplateView):

    template_name = u"path/to/template.html"

SSLRequiredMixin 
Новое в версии 1.8.0.

Простой миксин представления, который требует, чтобы входящий запрос был защищен, проверяя метод request.is_secure () Django . По умолчанию миксин вернет постоянный (301) редирект на версию https текущего URL. При желании вы можете установить lift_exception = True и 404 будет поднят.

Стандартное использование Django 

from django.views.generic import TemplateView

from braces.views import SSLRequiredMixin


class SomeSecureView(SSLRequiredMixin, TemplateView):
    """ Redirects from http -> https """
    template_name = "path/to/template.html"

Стандартное использование Django 

from django.views.generic import TemplateView

from braces.views import SSLRequiredMixin


class SomeSecureView(SSLRequiredMixin, TemplateView):
    """ http request would raise 404. https renders view """
    raise_exception = True
    template_name = "path/to/template.html"

RecentLoginRequiredMixin 
Новое в версии 1.8.0.

Этот миксин требует, чтобы пользователь вошел в систему в течение определенного количества секунд. Это делается для предотвращения устаревших сеансов или для создания тайм-аута сеанса, который часто используется для финансовых приложений и тому подобного. Этот миксин включает в себя функциональность LoginRequiredMixin , поэтому вам не нужно использовать оба в одном представлении.

from django.views.generic import TemplateView

from braces.views import RecentLoginRequiredMixin


class SomeSecretView(RecentLoginRequiredMixin, TemplateView):
    max_last_login_delta = 600  # Require a login within the last 10 minutes
    template_name = "path/to/template.html"

 

5 марта 2019 г. 20:26 Теги - # django-braces’s Категория - django-braces’s Kiwi standing on oval477
DJWOMS

test


Добавлен - 26 июня 2019 г. 21:56 | Изменен - 26 июня 2019 г. 21:56