2012-12-16 8 views
5

Ich fühle mich ziemlich dumm, das zu fragen, aber ich werde es trotzdem tun. Die API-Referenz "Users" in der Django-Dokumentation "User authentication in Django" (v. 1.4) besagt, dass ein Benutzername nur Buchstaben, Ziffern und die Zeichen @, +,., - und _ enthalten darf. Dennoch kann ich die Python-Shell gehen und wie folgt vorgehen:Warum erlaubt models.User ungültige Zeichen in Benutzername?

>>> from django.contrib.auth.models import User 
>>> u = User.objects.create_user('joe#') 

Warum nicht diese eine Ausnahme ausgelöst? Ich habe mir den Quellcode in ../contrib/auth/models.py angeschaut und er scheint keine ungültigen Zeichen zu kennzeichnen. Was ist denn hier los? Wenn Sie einen fehlerhaften Benutzernamen abfangen möchten, müssen Sie dies über die Formularvalidierung tun.

Antwort

4

Ich denke, dass die Entwickler den Anwendungsentwicklern die Flexibilität geben wollten, damit wir spezielle Symbole speichern konnten. Statt die Eingaben auf Modellebene zu validieren, wird dies in der Form gemacht. Sie können das Formular innerhalb django.contrib.auth.form.UserCreationForm

Das Snippet finden hier ist:

Sie die Validierung sehen Regular Expression auf das Feld Benutzername verwendet wird.

class UserCreationForm(forms.ModelForm): 
    """ 
    A form that creates a user, with no privileges, from the given username and 
    password. 
    """ 
    error_messages = { 
     'duplicate_username': _("A user with that username already exists."), 
     'password_mismatch': _("The two password fields didn't match."), 
    } 
    username = forms.RegexField(label=_("Username"), max_length=30, 
     regex=r'^[\[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.")}) 
    password1 = forms.CharField(label=_("Password"), 
     widget=forms.PasswordInput) 
    password2 = forms.CharField(label=_("Password confirmation"), 
     widget=forms.PasswordInput, 
     help_text = _("Enter the same password as above, for verification.")) 
+0

Ich sehe. Vielen Dank, Raunak! – William

+0

Enthält der Regex-Ausdruck in Ihrem Code den Unterstrich? – Fydo

+0

Denken Sie nicht, dass es eine gute Idee für sie ist, da es Inkonsistenz erzeugt. Siehe [diese Ausgabe] (https://github.com/pennersr/django-allauth/issues/1321) –

Verwandte Themen