3

我正在開發一個使用Django 1.4的網站,並使用django註冊註冊過程。事實證明,不允許Unicode字符作爲用戶名,每當用戶輸入例如作爲用戶名註冊失敗的一部分的中文字符:Django用戶名中的Unicode字符

此值可能只包含字母,數字和@ /。/ +/-/_字符。

是否可以更改它,以便在用戶名中允許Unicode字符?如果是,我該怎麼辦?此外,它可以導致任何問題?

+0

雖然檢索用戶名和其他字段,你可以嘗試在utf-8中編碼它們,然後存儲它們。嘗試 - >編碼('utf-8')。 –

+0

感謝您的建議。來自新加坡的用戶向我報告,當他嘗試使用僅包含拉丁字符的用戶名進行註冊時,他可以看到上述錯誤消息。他有他的系統和鍵盤配置爲輸入中文字符,所以我懷疑他輸入的任何內容都被編碼爲Unicode。你認爲轉換到utf-8會解決這個問題嗎? – piokuc

+0

是的,它應該做的伎倆。請查看我們的網站www.vialogues.com,嘗試使用任何外語創建帳戶。我們使用相同的東西,轉換爲utf-8。 –

回答

5

這真的不是問題 - 因爲這個字符限制只在我記憶中的UserCreationForm(或RegistrationForm中的django註冊)中,並且您可以很容易地創建自己的數據庫字段只是正常的TextField。

但是那些限制不是沒有理由的。我現在可以想到的其中一個可能的問題是創建鏈接 - 用戶名經常用於此目的,並且可能會導致問題。還有與用戶名尋找相同,但其實不同的字符是等

+1

你的回答完全不準確。那麼,不是*完全*,關於僅由該形式施加的限制的一點是正確的。但是,Django和每個現代瀏覽器都具有完全unicode功能。 Unicode在URL中完全可以接受。另外,每個unicode字符都是唯一的字節碼,所以'blah'和'bláh'*不是相同的,可以同時用作用戶名。 –

+5

我是否告訴瀏覽器無法在任何地方使用?那麼 - 我完全不是在談論字節碼,而是字符如何看起來以及如何讓用戶感到困惑 - f.e.告訴我「unicode」中完全不同的字符串「Аnnа」和「Anna」之間的區別。這是非常可能的使用它的某種騙局。 – jasisz

+0

@jasisz你能否給我更詳細的信息,說明我應該怎麼做才能解除限制?另外,在你的例子中,「Аnnа」和「Anna」之間的區別究竟是什麼? – piokuc

1

Django的1.10現在正式支持Unicode用戶名假賬戶的可能性較大,請參見:

在django.contrib中用戶模型。 auth最初只接受用戶名中的ASCII 字母。儘管這不是刻意的選擇,但在使用Python 3時,Unicode 字符總是被接受。

用戶名驗證程序現在僅在Python 3上明確接受 默認的Unicode字母。可以使用ASCIIUsernameValidator或 UnicodeUsernameValidator,通過 更改用戶模型的username_validator屬性或該模型的任何 代理來覆蓋此默認行爲。自定義用戶模型也可能使用那些 驗證程序。

相關問題