Я пытаюсь создать декоратор, который перенаправляет пользователя в представление, которое принимает пароль вошедшего в систему пользователя, а затем переходит к запрошенному представлению, если пароль введен правильно. Цель этого состоит в том, чтобы добавить шаг подтверждения к чему-то вроде представления удаления.
Это то, что у меня есть:
decorators.py
def confirm_password(view_function):
@wraps(view_function)
def wrapper(request, *args, **kwargs):
# some inner function/logic to call ConfirmPassword view??
# if something:
# from .views import ConfirmPassword
# return ConfirmPassword.as_view()(request, *args, **kwargs)
return view_function(request, *args, **kwargs)
return wrapper
views.py
class ConfirmPassword(UpdateView):
form_class = ConfirmPasswordForm
template_name = 'myapp/confirm-password.html'
def get_object(self):
return self.request.user
def get_success_url(self):
return self.request.get_full_path()
forms.py
class ConfirmPasswordForm(forms.ModelForm):
confirm_password = forms.CharField(widget=forms.PasswordInput())
class Meta:
model = User
fields = ('confirm_password', )
def clean(self):
cleaned_data = super(ConfirmPasswordForm, self).clean()
confirm_password = cleaned_data.get('confirm_password')
if not check_password(confirm_password, self.instance.password):
self.add_error('confirm_password', 'Incorrect password.')
Как правильно структурировать вышеуказанный декоратор вызвать представление ConfirmPassword? Спасибо!
Изменить - я обнаружил, что проект делает что-то похожее:
https://simpleisbetterthancomplex.com/tutorial/2016/08/15/how-to-create-a-password-confirmation-view.html
За исключением, в то время как приведенное выше просит пользователя повторно -введите свой пароль по истечении такого количества времени, я хочу, чтобы пользователю предлагалось повторно вводить пароль каждый раз для определенных ресурсов.