def setup(self, request, *args, **kwargs): # URL で与えられた contact_id からお問い合わせのインスタンスを取得 self.contact = get_object_by_uuid(Contact, kwargs.get('pk'), raise_404=True) return super().setup(request, *args, **kwargs)
def get_redirect_url(self, **kwargs): """kwargs の値に応じて有効/無効をを更新 """ # kwargs で指定した user_id を id としてもつ User のインスタンスを取得 user = get_object_by_uuid(User, kwargs.get('pk'), raise_404=True) if user.is_staff: # 事務局員の場合は拒否 messages.error(self.request, '事務局員の場合は設定できません!') else: # kwargs で指定した mode の値に応じてスタッフ権限を更新 mode = kwargs.get('mode') if mode == 'enable': user.is_active = True user.save() messages.success(self.request, f'{user} さんのアカウントを有効にしました!') elif mode == 'disable': user.is_active = False user.save() messages.success(self.request, f'{user} さんのアカウントを無効にしました!') else: # 想定外の mode が与えられた場合は error を発生させる raise Http404 # ユーザー詳細画面に redirect return reverse('home:superuser_user_detail', kwargs={'pk': user.id})
def get_redirect_url(self, **kwargs): # kwargs で指定した contact_id を id としてもつ Contact のインスタンスを取得 contact = get_object_by_uuid(Contact, kwargs.get('pk'), raise_404=True) if contact.check_permission(self.request.user): # kwargs で指定した mode の値に応じてスタッフ権限を更新 mode = kwargs.get('mode') if mode == 'close': contact.closed = True contact.save() messages.success(self.request, f'{contact} を対応済みにしました!') elif mode == 'open': contact.closed = False contact.save() messages.success(self.request, f'{contact} を未対応にしました!') else: # それ以外の mode の場合は 404 raise Http404 else: # 権限がない場合は 403 raise PermissionDenied # ユーザー詳細画面に redirect return reverse('communication:contact_detail', kwargs={'pk': contact.id})
def setup(self, request, *args, **kwargs): # model, pk が与えられている場合は、object を登録 if hasattr(self, 'model_list'): self.object_list = [] for index, model in enumerate(self.model_list): self.object_list.append(get_object_by_uuid( model, kwargs.get(f'pk{index}'), raise_404=True)) return super().setup(request, *args, **kwargs)
def search(self, token, kind, dt=None): """有効なEメールトークンが存在するかどうかを確認 Args: token(str): Eメールトークンの文字列 kind(str): Eメールトークンの種別(利用用途) dt(datetime): 判定を実施する日時(指定しない場合は現在) Returns: EmailToken or None: 存在すればその instance, なければ None """ # 有効時間(秒単位) VALIDATED_PERIOD = 1800 # 判定を実施する日時の default 値は「現在」 if dt is None: dt = datetime.now() # EmailToken の取得を試行 email_token = get_object_by_uuid(self, token) # 取得に失敗した場合は、認証失敗として判定 if not email_token: return # 一定時間以上超過していた場合は、認証失敗として判定 if dt > email_token.create_datetime + \ timedelta(seconds=VALIDATED_PERIOD): return # 使用済みの場合は、認証失敗として判定 if email_token.is_used: return # 種別が異なる場合は、認証失敗として判定 # e.g.,「学内/個人情報入力」で発行した token を「学外/アカウント登録」で # 利用することを抑止 if kind != email_token.kind: return # それ以外の場合は、認証成功。インスタンスを返す return email_token
def get_redirect_url(self, **kwargs): # kwargs で指定した user_id を id としてもつ User のインスタンスを取得 user = get_object_by_uuid(User, kwargs.get('pk'), raise_404=True) if not user.is_student: # 学外アカウントの場合は拒否 messages.error(self.request, '学外アカウントの場合は設定できません!') elif user.is_superuser: # システム管理者の場合は拒否 messages.error(self.request, 'システム管理者の場合は設定できません!') else: # kwargs で指定した mode の値に応じてスタッフ権限を更新 mode = kwargs.get('mode') if mode == 'enable': StaffInformation.objects.create(user=user) messages.success(self.request, f'{user} さんを事務局員に変更しました!') elif mode == 'disable': StaffInformation.objects.get(user=user).delete() messages.success(self.request, f'{user} さんを一般京大生に変更しました!') else: # 想定外の mode が与えられた場合は error を発生させる raise Http404 # ユーザー詳細画面に redirect return reverse('home:superuser_user_detail', kwargs={'pk': user.id})
def setup(self, request, *args, **kwargs): # model, pk が与えられている場合は、object を登録 if hasattr(self, 'model'): self.object = get_object_by_uuid( self.model, kwargs.get('pk'), raise_404=True) return super().setup(request, *args, **kwargs)
def setup(self, request, *args, **kwargs): self.object = get_object_by_uuid( self.model, kwargs.get('pk'), raise_404=True) super().setup(request, *args, **kwargs)