2012-12-16 7 views
5

मुझे यह पूछने के लिए बेवकूफ लगता है लेकिन मैं वैसे भी करूँगा। Django प्रलेखन "User authentication in Django" (v। 1.4) में 'उपयोगकर्ता' एपीआई संदर्भ कहता है कि उपयोगकर्ता नाम में केवल अक्षर, अंक और वर्ण @, +,।, -, और _ हो सकते हैं। फिर भी मैं पाइथन खोल में जा सकता हूं और निम्न कार्य करता हूं:मॉडल.उसर उपयोगकर्ता नाम में अमान्य वर्णों की अनुमति क्यों देता है?

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

यह अपवाद क्यों नहीं उठाता है? मैंने स्रोत कोड को ../contrib/auth/models.py में देखा और यह अमान्य वर्णों को फ़्लैग करने वाला प्रतीत नहीं होता है। यहाँ क्या चल रहा है? ऐसा लगता है कि यदि आप एक गलत उपयोगकर्ता नाम पकड़ना चाहते हैं, तो आपको इसे फॉर्म सत्यापन के माध्यम से करना होगा।

उत्तर

4

मुझे लगता है कि डेवलपर एप्लिकेशन डेवलपर्स को लचीलापन प्रदान करना चाहते थे ताकि हम विशेष प्रतीकों को स्टोर कर सकें। इसलिए, मॉडल स्तर पर इनपुट को सत्यापित करने के बजाय, यह फ़ॉर्म में किया जाता है। आप django.contrib.auth.form.UserCreationForm

अंदर प्रपत्र प्राप्त कर सकते हैं स्निपेट यहां है:

आप प्रयोक्ता नाम मैदान पर नियमित अभिव्यक्ति का उपयोग कर मान्यता देख सकते हैं।

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

मुझे लगता है। बहुत बहुत धन्यवाद, राणाक! – William

+0

क्या आपके कोड में रेगेक्स अभिव्यक्ति अंडरस्कोर वर्ण शामिल है? – Fydo

+0

ऐसा नहीं लगता कि यह उनके लिए एक अच्छा विचार है क्योंकि यह असंगतता पैदा करता है। [यह समस्या] देखें (https://github.com/pennersr/django-allauth/issues/1321) –

संबंधित मुद्दे

 संबंधित मुद्दे