kawaz.core.personas.views.persona のソースコード

from django.contrib import messages
from django.http import (HttpResponseNotAllowed,
                         HttpResponseRedirect,
                         Http404)
from django.utils.translation import ugettext as _
from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from django.views.generic.edit import UpdateView
from django.shortcuts import get_object_or_404
from django_filters.views import FilterView
from permission.decorators import permission_required
from ..forms import PersonaUpdateForm
from ..models import Persona
from ..models import Service
from ..filters import PersonaFilter


[ドキュメント]class PersonaDetailView(DetailView): model = Persona slug_field = 'username'
[ドキュメント] def get_queryset(self): qs = super().get_queryset() qs = qs.exclude(is_active=False) qs = qs.exclude(_profile=None) qs = qs.exclude(role='wille') qs = qs.prefetch_related( '_profile', '_profile__skills', '_profile__accounts__service', ) return qs
[ドキュメント] def get_context_data(self, **kwargs): context = super().get_context_data() user = self.request.user if user.has_perm('personas.view_profile', self.object._profile): # アクセスユーザーは対象ユーザーのプロフィールを見る権限を所有 # しているので `profile` というコンテキストにプロフィール実体 # を渡す(アンダーバーから始まっているためテンプレートにて # `{{ object._profile }}`というようなアクセスは出来ない) # これはヒューマンエラーによるテンプレートでのプライベートな # プロフィール参照を避けるための仕様である context['profile'] = self.object._profile return context
[ドキュメント]class PersonaListView(FilterView): model = Persona filterset_class = PersonaFilter template_name_suffix = '_list' paginate_by = 24
[ドキュメント] def get_queryset(self): qs = super().get_queryset() qs = qs.exclude(is_active=False) qs = qs.exclude(_profile=None) qs = qs.exclude(role='wille') qs = qs.prefetch_related( '_profile', '_profile__skills', '_profile__accounts__service', ) qs = qs.order_by('-last_login') return qs
[ドキュメント] def get_context_data(self, **kwargs): data = super().get_context_data(**kwargs) data['all_services'] = Service.objects.all() return data
@permission_required('personas.view_retired_persona')
[ドキュメント]class PersonaRetiredView(ListView): template_name = 'personas/persona_retired.html'
[ドキュメント] def get_queryset(self): return Persona.objects.retired()
@permission_required('personas.change_persona')
[ドキュメント]class PersonaUpdateView(SuccessMessageMixin, UpdateView): model = Persona form_class = PersonaUpdateForm template_name = 'personas/persona_form.html'
[ドキュメント] def get_queryset(self): qs = super().get_queryset() qs = qs.exclude(is_active=False) qs = qs.exclude(_profile=None) qs = qs.exclude(role='wille') qs = qs.prefetch_related( '_profile', '_profile__skills', '_profile__accounts__service', ) return qs
[ドキュメント] def get_object(self, queryset=None): if not self.request.user.is_authenticated(): raise Http404( _("Anonymous user does not have a persona update view") ) qs = queryset or self.get_queryset() return get_object_or_404(qs, pk=self.request.user.pk)
[ドキュメント] def get_success_message(self, cleaned_data): return _('Your user information was successfully updated.')
[ドキュメント]class AssignRoleMixin(object): model = Persona role = None
[ドキュメント] def get_queryset(self): qs = super().get_queryset() qs = qs.exclude(is_active=False) qs = qs.exclude(_profile=None) qs = qs.exclude(role='wille') return qs
[ドキュメント] def get_object(self, queryset=None): if not self.request.user.is_authenticated(): raise Http404( _("Anonymous user does not have an assign role view") ) qs = queryset or self.get_queryset() return get_object_or_404(qs, pk=self.request.user.pk)
[ドキュメント] def get(self, request, *args, **kwargs): return HttpResponseNotAllowed(['POST',])
@permission_required('personas.assign_role_persona')
[ドキュメント] def post(self, request, *args, **kwargs): self.object = self.get_object() self.object.role = self.role self.object.save() messages.success(request, self.get_success_message({})) return HttpResponseRedirect(self.get_success_url())
[ドキュメント] def get_success_url(self): return self.get_object().get_absolute_url()
[ドキュメント] def get_success_message(self, cleaned_data): return _("Your role is changed to '%(role)s'" % { 'role': self.role.capitalize() })
[ドキュメント]class PersonaAssignAdamView(AssignRoleMixin, UpdateView): """アダムに昇格するためのビュー""" role = 'adam'
[ドキュメント]class PersonaAssignSeeleView(AssignRoleMixin, UpdateView): """ゼーレに降格するためのビュー""" role = 'seele'