【问题标题】:Disabling email-style usernames in Django 1.2 with django-registration使用 django-registration 在 Django 1.2 中禁用电子邮件样式的用户名
【发布时间】:2011-02-27 01:04:45
【问题描述】:

Django 1.2 允许用户名采用电子邮件地址的形式。

在 Django 1.2 中更改:用户名可能 现在包含@、+、。和 - 字符

我知道这是一个非常需要的功能,但是如果您不想要新的行为怎么办?它使配置文件 URL 中的用户名混乱,并且似乎破坏了 django-registration(如果用户使用电子邮件样式的用户名注册帐户,则 django-registration 激活电子邮件中的链接返回 404)。

有没有人有恢复旧行为和禁用电子邮件样式用户名的方法?

【问题讨论】:

    标签: django registration


    【解决方案1】:

    django-registration 实际上不是这里的问题。问题是我已经继承了它的 RegistrationForm,用新的 help_text 重新定义了用户名字段。这样做,我阻止了它使用自己的正则表达式字段。为了解决这个问题,我不得不从 RegistrationForm 中提取一些零碎的东西到我的 EnhancedRegistrationForm 子类中。

    注意正则表达式行,它反映了旧式用户名字符限制(这是我想要的)。

    from registration.forms import RegistrationForm   
    
    # Carry these over from RegistrationForm - needed in the form definition below
    attrs_dict = {'class': 'required'}
    from django.utils.translation import ugettext_lazy as _
    
    class EnhancedRegistrationForm(RegistrationForm):
        first_name = forms.CharField(label='first name', max_length=30, required=True)
        last_name = forms.CharField(label='last name', max_length=30, required=True)    
        username = forms.RegexField(regex=r'^\w+$',
            max_length=30,
            widget=forms.TextInput(attrs=attrs_dict),
            help_text='Email addresses cannot be used as usernames.', 
            required=True,
            label=_("Username"),
            error_messages={'invalid':"You cannot use an email address as a username, sorry."})    
    
        class Meta:
            fields = ('first_name','last_name','username','email','password1','password2')  
    
    
        def save(self, *args, **kwargs):
            """
            Overriding save, so call the parent form save and return the new_user
            object.
            """
            new_user = super(EnhancedRegistrationForm, self).save(*args, **kwargs) 
            new_user.first_name = self.cleaned_data['first_name']
            new_user.last_name = self.cleaned_data['last_name']
            new_user.save()
            return new_user   
    

    【讨论】:

      【解决方案2】:

      没有直接的方法可以恢复到旧的行为。

      处理此问题的最简单方法是根据您的要求对用户名进行客户端和服务器端验证。 django-registration 不是一个积极开发的组件,我不会指望来自那个方向的任何东西。只需添加一些额外的验证即可。

      引用雅各布on this matter

      [...] 另一个常见的请求是允许 使用电子邮件地址作为用户名。

      自定义注册/注册表单可以 处理进一步的限制。

      【讨论】:

      • django-registration 没有积极开发?我认为 ubernostrum 只是在重大重构、提供可定制的后端等方面投入了大量工作。这很遗憾 - 我在每个项目中都使用它。我实际上找到了一种方法来完成这项工作!下面回答。谢谢尤瓦尔。
      猜你喜欢
      • 2011-09-15
      • 2013-07-23
      • 2010-11-22
      • 1970-01-01
      • 2011-02-23
      • 1970-01-01
      • 2012-02-18
      相关资源
      最近更新 更多