def form_valid(self, form): # 入力されたメールアドレスを取得 input_email = form.cleaned_data.get('email') # 入力されたメールアドレスを持つ学外アカウントが存在するかを確認 outsider_exists = User.objects.filter( is_student=False, userinformation__email=input_email).exists() # そのような学外アカウントが存在する場合は、メールアドレスを送信 if outsider_exists: # token を作成 form.instance.kind = EmailToken.KindChoices.OUTSIDER_PWRESET.value super().form_valid(form) # email を送信 penguin_send_mail( 'パスワード再設定', [form.instance.email], 'home/mails/auth_outsider_pwreset.txt', {'register_url': self._get_pwreset_url(str(form.instance.id))}) # 学外アカウントの有無に関わらず、message を追加して home:index に redirect # (存在しない場合はメールを送信しないが、success message が表示される) messages.info( self.request, f'E メールを {input_email} に送信しました!' 'メールボックスを確認してください。' '該当する学外アカウントが存在しない場合はメールが届きません。' '一定時間経過しても届かない場合は、もう一度手続きをやり直してください。') # インスタンスを作成しなかった場合でも、success_url に遷移させる return redirect(self.success_url)
def form_valid(self, form): # 作成者を登録 form.instance.create_user = self.request.user # Contact のインスタンスを作成 response = super().form_valid(form) # 初期閲覧部署を登録 form.instance.department_list.set( form.instance.contact_kind.department_list.all()) # お問い合わせ作成者にメールを送信 penguin_send_mail('お問い合わせを送信しました', [self.request.user], 'communication/mails/contact_create.txt', {'contact': form.instance}) # 事務局員に slack を送信 slack_message('communication/slacks/contact_create.slack', {'slack': form.instance.contact_kind.slack}, form.instance.get_slack_attachments) # メッセージを追加 messages.success(self.request, 'お問い合わせを事務局員に送信しました!') return response
def form_valid(self, form_list): # form のインスタンスを取得 user_information_form = form_list[0] student_information_form = form_list[1] with transaction.atomic(): # UserInformation を作成 user_information_form.instance.email = self.email_token.email user_information_form.instance.user = self.request.user user_information_form.save() # StudentInformation を作成 student_information_form.instance.user = self.request.user student_information_form.save() # token を無効化 EmailToken.objects.filter(email=self.email_token.email).update( is_used=True) # email を送信 penguin_send_mail('学内アカウント個人情報入力完了', [self.email_token.email], 'home/mails/auth_student_identify_finished.txt') # messages を追加 messages.success(self.request, '個人情報の入力が完了しました!') return super().form_valid(form_list)
def form_valid(self, form): with transaction.atomic(): # User のインスタンスを作成 user = User.objects.create(username=self.email_token.email) user.set_password(form.cleaned_data.get('password')) user.save() # id, email を UserInformation に渡す form.instance.user = user form.instance.email = self.email_token.email # UserInformation のインスタンスを作成 response = super().form_valid(form) # token を使用済(使用不可)にする EmailToken.objects.filter(email=self.email_token.email).update( is_used=True) # email を送信 penguin_send_mail('学外アカウント作成完了', [user], 'home/mails/auth_outsider_register_finished.txt') # ログイン実施 login(self.request, user, backend='django.contrib.auth.backends.ModelBackend') # message を追加 messages.success(self.request, '学外アカウントを作成し、ログインしました!' f'ようこそ {user} さん!') return response
def form_valid(self, form): with transaction.atomic(): # User を取得し、パスワードを再設定 user = User.objects.get(username=self.email_token.email) user.set_password(form.cleaned_data['password']) user.save() # token を使用済(使用不可)にする EmailToken.objects.filter(email=self.email_token.email).update( is_used=True) # email を送信 penguin_send_mail('パスワード再設定完了', [user], 'home/mails/auth_outsider_pwreset_finished.txt') # success message を追加 messages.success(self.request, 'パスワードを再設定しました!') return super().form_valid(form)
def form_valid(self, form): # トークンの種別を指定 form.instance.kind = EmailToken.KindChoices.OUTSIDER_REGISTER.value # インスタンスを作成 response = super().form_valid(form) # email を送信 penguin_send_mail( '学外アカウント作成', [form.instance.email], 'home/mails/auth_outsider_register.txt', {'register_url': self._get_register_url(str(form.instance.id))}) # message を追加 messages.info( self.request, f'E メールを{form.instance.email}に送信しました!' 'メールボックスを確認してください') return response
def form_valid(self, form): # トークンの種別を指定 form.instance.kind = EmailToken.KindChoices.STUDENT_IDENTIFY.value # インスタンスを作成 response = super().form_valid(form) # email を送信 penguin_send_mail( '学内アカウント個人情報入力', [form.instance.email], 'home/mails/auth_student_identify.txt', { 'register_url': self._get_student_identify_url(str(form.instance.id)) }) # message を追加 messages.info( self.request, f'E メールを {form.instance.email} に送信しました!' 'メールボックスを確認してください') return response