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