2010-06-02 43 views
2

Django的1.2允許用戶名採取的電子郵件地址的形式。停用電子郵件風格用戶名在Django 1.2 django的登記

在Django 1.2中更改:用戶名可能爲 現在包含@,+,。和 - 字符

我知道這是一個非常需要的功能,但是如果您不想要新的行爲呢?它會在配置文件URL中產生混亂的用戶名,並且似乎會中斷django註冊(如果用戶使用電子郵件樣式的用戶名註冊帳戶,則django註冊激活電子郵件中的鏈接將返回404)。

沒有人有恢復舊的行爲,並禁用電子郵件式的用戶名配方?

回答

1

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 
1

沒有簡單的方法來恢復舊的行爲。

來處理,這將是根據您的要求來執行用戶名的客戶端和服務器端驗證的最簡單方法。 Django註冊不是一個積極開發的組件,我不會指望從這個方向來的任何東西。只需在你身邊添加一些額外的驗證。

引述雅各布on this matter

[...]另一種普遍的要求是允許使用 電子郵件地址的使用者名稱。

自定義登錄/註冊表格可以 應對進一步的限制。

+0

django-registration沒有積極開發?我認爲ubernostrum只是把大量的工作放到了一個重要的重構中,提供了可定製的後端等等。聽到這種恥辱 - 我在每個項目中都使用它。 我確實找到了一種方法來完成這項工作!下面回答。謝謝Yuval。 – shacker 2010-06-02 22:11:44