Django用户注册用户名变为" firstname.lastname"

时间:2017-03-29 12:29:16

标签: html django forms authentication

我想为我的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;输入标签,用于连接名称,但我无法使其工作。

由于

2 个答案:

答案 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()
...
相关问题