繁体   English   中英

Django用户注册,用户名变为“ firstname.lastname”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM