Django декоратор - повторно введите пароль, чтобы продолжить - PullRequest
0 голосов
/ 03 августа 2020

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

Это то, что у меня есть:

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

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

...