[英]Django user registration where username becomes “firstname.lastname”
我想为我的django应用程序创建一个注册页面,以便“请求”访问权限。 换句话说,他们提交表单并创建用户和user.is_active = False。 然后,作为管理员,我可以批准他们的访问。
但是,我不希望他们能够输入用户名。 相反,我希望他们的用户名是firstname.lastname。 在极少数情况下,人们尝试注册(应用程序是针对少数人)的同名-那么最后需要添加一个数字。
我现在使用注册视图执行此操作:
def signup(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
form.save()
first_name = form.cleaned_data.get('first_name')
last_name = form.cleaned_data.get('last_name')
raw_password = form.cleaned_data.get('password1')
username = form.cleaned_data.get('username')
user = authenticate(username=username, password=raw_password)
user.is_active = False
user.save()
return render(request, 'registration/signedup.html', {'user': user})
else:
return render(request, 'registration/signup.html', {'form': form, 'invalid': 'Please try again.'})
else:
form = SignUpForm()
return render(request, 'registration/signup.html', {'form': form})
和注册表格:
class SignUpForm(UserCreationForm):
first_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
last_name = forms.CharField(max_length=30, required=False, help_text='Optional.')
email = forms.EmailField(max_length=254, help_text='Required. Inform a valid email address.')
class Meta:
model = User
fields = ('username', 'first_name', 'last_name', 'email', 'password1', 'password2', )
这是我的注册页面的html:
<form method="post" autocomplete="off">
{% csrf_token %}
<table class='login' width='400'>
{% for field in form %}
<tr>
<td width='200' class='loginrow'>{{ field.label_tag }}</td>
<td width='180' class='loginrow'>{{ field }}</td>
{% for error in field.errors %}
<p style="color: red">{{ error }}</p>
{% endfor %}
</tr>
{% endfor %}
</table>
<button type="submit">Sign up</button>
</form>
我试图从表单字段中删除用户名,然后在用户视图中创建用户名变量为firs_name +'。'+ last_name,用户= authenticate()不返回任何内容。
有没有一种方法可以自动生成用户名而无需用户提交? -我还考虑在html页面中使用javascript函数,并使用隐藏的“用户名”输入标签来连接名称,但我也无法使用它。
谢谢
覆盖SignUpForm
save
方法
def save(self, commit=True):
instance = super(SignUpForm, self).save(commit=False)
instance.username = "%s.%s" %(self.cleaned_data['first_name'], self.cleaned_data['last_name'])
if commit:
instance.save()
return instance
您可以尝试类似:
my_data = dict(request.POST.iterlists())
my_data['username'] = my_data['firstname'] + '.' + my_data['lastname']
form = SignUpForm(my_data)
if form.is_valid():
form.save()
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.