我想为我的django应用程序创建一个注册页面,以便请求'访问。换句话说,他们提交表单,并创建用户和user.is_active = False。然后作为管理员我可以批准他们的访问权限。
但我不希望他们能够输入他们的用户名。相反,我希望他们的用户名是firstname.lastname。在不太可能的情况下,人们试图注册(app适用于少数人) - 那么最后需要添加一个数字。
我现在使用注册视图执行此操作:
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>
我尝试从我的表单字段中删除用户名,然后在用户名= {39}的情况下创建用户名变量作为firs_name +&#39;。&#39; + last_name在我的视图中返回。
有没有办法在没有用户提交用户名的情况下自动生成用户名? - 我还想在html页面中使用javascript函数,以及一个隐藏的&#39;用户名&#39;输入标签,用于连接名称,但我无法使其工作。
由于
答案 0 :(得分:0)
覆盖save
SignUpForm
方法
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
答案 1 :(得分:0)
您可以尝试以下方式:
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()
...