【问题标题】:Confirm action with password in Django 1.5在 Django 1.5 中使用密码确认操作
【发布时间】:2013-05-02 10:28:12
【问题描述】:

如何在 Django 1.5 中创建“使用密码确认”表单?我将创建一个禁用用户帐户的功能,但如果用户无法提供正确的密码,则不应禁用该帐户。我尝试过使用 FormView 和 form_class=AuthenticationForm,但它同时显示了用户名和密码,我只需要密码,因为用户已经登录。

【问题讨论】:

    标签: django django-forms django-views django-authentication django-1.5


    【解决方案1】:

    编写密码验证表单:

    forms.py

    from django import forms
    from django.contrib.auth.models import check_password
    
    class ValidatePasswordForm(forms.Form):
        password = forms.CharField(label="Your Password",
            widget=forms.PasswordInput)
    
        def __init__(self, *args, **kwargs):
            self.user = kwargs.pop('user')
            super(ValidatePasswordForm, self).__init__(*args, **kwargs)
    
        def clean_password(self):
            password = self.cleaned_data['password']
            valid = check_password(password, self.user.password)
            if not valid:
                raise forms.ValidationError('Invalid password')
            return password
    

    views.py

    from django.shortcuts import render_to_response
    from django.template import RequestContext
    
    from myapp.forms import ValidatePasswordForm
    
    @login_required
    def validate_password(request):
        form = ValidatePasswordForm(request.POST or None, user=request.user)
        if request.method == 'POST':
            if form.is_valid():
                # do something upon validation
                # disable account
                pass
        request_dict = {'form': form}
        return render_to_response('my_template.html',
            request_dict, context_instance=RequestContext(request))
    

    【讨论】:

      猜你喜欢
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-15
      • 2021-04-21
      • 1970-01-01
      • 1970-01-01
      • 2020-01-15
      • 2021-02-22
      相关资源
      最近更新 更多