2012-03-22 55 views
2

我目前正在實現一個應用程序的用戶註冊。我試圖將django.auth的默認行爲改爲使用電子郵件而不是用戶名。我想我會使用自定義身份驗證後端。我希望用戶仍然能夠提供用戶名。django.auth操縱模型字段/允許在用戶名空間

  1. 我怎樣才能讓像「李四」的用戶名空間不改變django.auth車型領域。

  2. 如何使電子郵件字段成爲必需。目前我的UserCreation表單中的clean_email方法會在電子郵件爲空時引發驗證錯誤。一定會有更好的辦法。

感謝布蘭登和安德魯·斯萊奇這裏是我的解決方案:

class RegisterForm(UserCreationForm): 
    username = forms.RegexField(label=("Username"), max_length=30, regex=r'^[ \t\r\n\f\[email protected]+*-]+$', 
     help_text = ("Required. 30 characters or fewer. Letters, digits and @/./+/-/_ only."), 
     error_messages = {'invalid': ("This value may contain only letters, numbers and @/./+/-/_ characters.")}) 
class Meta: 
    model = User 

我從UserCreationForm複製領域。重要的部分是將\ t \ r \ n \ f添加到正則表達式中。 \ s不會工作。

回答

2

你總是可以覆蓋從contrib.auth.forms的UserCreationForm實現用戶名不同的領域,並提供自己的驗證。只需繼承表格並添加您自己的用戶名字段,或在類別的__init__中覆蓋它。

+0

謝謝。這很容易。我已經覆蓋了UserCreationForm。我現在覆蓋了用戶名字段。 – jarred 2012-03-22 19:16:13

+0

太棒了。真高興你做到了。 – Brandon 2012-03-22 20:54:41

0

對於用戶名: 重寫UserCreationForm(django.contrib.auth.forms)以修改字段的regex參數以允許空格。沒有必要對模型進行更改。

對於電子郵件: http://djangosnippets.org/snippets/74/

+0

感謝,that's解決方案。爲什麼我必須使用\ t \ r \ n \ f而不是\ s? – jarred 2012-03-22 19:25:09

1

也許你想使用validate_slug

確保值

一個RegexValidator例如僅由字母,數字,下劃線或連字符