Django的1.2允许用户名采取的电子邮件地址的形式。停用电子邮件风格用户名在Django 1.2 django的登记
在Django 1.2中更改:用户名可能为 现在包含@,+,。和 - 字符
我知道这是一个非常需要的功能,但是如果您不想要新的行为呢?它会在配置文件URL中产生混乱的用户名,并且似乎会中断django注册(如果用户使用电子邮件样式的用户名注册帐户,则django注册激活电子邮件中的链接将返回404)。
没有人有恢复旧的行为,并禁用电子邮件式的用户名配方?
Django的1.2允许用户名采取的电子邮件地址的形式。停用电子邮件风格用户名在Django 1.2 django的登记
在Django 1.2中更改:用户名可能为 现在包含@,+,。和 - 字符
我知道这是一个非常需要的功能,但是如果您不想要新的行为呢?它会在配置文件URL中产生混乱的用户名,并且似乎会中断django注册(如果用户使用电子邮件样式的用户名注册帐户,则django注册激活电子邮件中的链接将返回404)。
没有人有恢复旧的行为,并禁用电子邮件式的用户名配方?
Django的登记实际上是不是这里的问题。问题是我已经将其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
没有简单的方法来恢复旧的行为。
来处理,这将是根据您的要求来执行用户名的客户端和服务器端验证的最简单方法。 Django注册不是一个积极开发的组件,我不会指望从这个方向来的任何东西。只需在你身边添加一些额外的验证。
引述雅各布on this matter:
[...]另一种普遍的要求是允许使用 电子邮件地址的使用者名称。
自定义登录/注册表格可以 应对进一步的限制。
django-registration没有积极开发?我认为ubernostrum只是把大量的工作放到了一个重要的重构中,提供了可定制的后端等等。听到这种耻辱 - 我在每个项目中都使用它。 我确实找到了一种方法来完成这项工作!下面回答。谢谢Yuval。 – shacker 2010-06-02 22:11:44