Python 在django';中添加新字段以及用户名和密码;用户登录表单

Python 在django';中添加新字段以及用户名和密码;用户登录表单,python,django,Python,Django,我想编辑django提供的登录表单,但由于安全问题,不想构建新表单。我看过其他的解决方案,好像这是一个很好的例子,但它根据手机号码分配电子邮件id。但是,我想添加另一个字段,该字段不是专门用于验证重定向所基于的输入。我对我的方法以及是否有可能这样做感到困惑。请建议。谢谢 您可以在forms.py文件中这样做 class UserLoginForm(forms.Form): username = forms.CharField(widget=forms.TextInput(attrs={'

我想编辑django提供的登录表单,但由于安全问题,不想构建新表单。我看过其他的解决方案,好像这是一个很好的例子,但它根据手机号码分配电子邮件id。但是,我想添加另一个字段,该字段不是专门用于验证重定向所基于的输入。我对我的方法以及是否有可能这样做感到困惑。请建议。谢谢

您可以在forms.py文件中这样做

class UserLoginForm(forms.Form):
    username = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'Username'}))
    password = forms.CharField(widget=forms.PasswordInput(attrs={'class':'form-control','placeholder':'Password'}))
    yourfield = forms.CharField(widget=forms.TextInput(attrs={'class':'form-control','placeholder':'yourfield'}))
    def clean(self, *args, **kwargs):
        username = self.cleaned_data.get("username")
        password = self.cleaned_data.get("password")

        #user_qs = User.objects.filter(username=username)
        #if user_qs.count() == 1:
        #   user = user_qs.first()
        if username and password:
            user = authenticate(username=username, password=password)
            if not user:
                raise forms.ValidationError("This user does not exist")
            if not user.check_password(password):
                raise forms.ValidationError("Incorrect password")
            if not user.is_active:
                raise forms.ValidationError("This user is no longer active")
            return super(UserLoginForm, self).clean(*args, **kwargs)

抱歉,如果我误解了你的问题,但这里是我如何添加额外的字段到用户注册它似乎很简单。为了详细起见,我还包括了一些额外的相关方法:

../forms.py:

class CustomRegistrationForm(RegistrationForm):
    """
    Form for registering a new user account.

    Subclasses should feel free to add any additional validation they
    need, but should avoid defining a ``save()`` method -- the actual
    saving of collected user data is delegated to the active
    registration backend.

    """
    username = forms.RegexField(regex=r'^[\w.@+-]+$',
                                max_length=30,
                                label="Username",
                                error_messages={'invalid': "This value may contain only letters, numbers and @/./+/-/_ characters."})

    email = forms.EmailField(label="E-mail")
    password1 = forms.CharField(widget=forms.PasswordInput,
                                label="Password")
    password2 = forms.CharField(widget=forms.PasswordInput,
                                label="Password (again)")

    extra_field = forms.CharField([field options])


    def clean(self):

        if 'password1' in self.cleaned_data and 'password2' in self.cleaned_data:
            if self.cleaned_data['password1'] != self.cleaned_data['password2']:
                raise forms.ValidationError("The two password fields didn't match.")
        return self.cleaned_data
然后,只需设置注册URL以使用适当的form类:

../url.py:

url(r'^accounts/register/$', RegistrationView.as_view(form_class=accounts.forms.CustomRegistrationForm), name='registration_register'),
这个字段不是标准模型的一部分,还是您的输入需要做一些额外的工作?您可以设置一个信号,以便在用户注册时实现一些额外的魔法:

from forms import CustomRegistrationForm
def user_created(sender, user, request, **kwargs):
    form = CustomRegistrationForm(request.POST)
    user_account = get_user_account(user)
    user_account.persona = form.data['persona_tier']
    user_account.save()

from registration.signals import user_registered
user_registered.connect(user_created)
仅供参考,我使用的是django registration redux后端,但不管怎样,这种方法都应该有助于接近您