Django

2011-12-07 7 views
23

में AuthenticationForm का उपयोग करते हुए मैं Django के साथ AuthenticationForm फार्म का उपयोग करने का प्रयास कर रहा हूँ और यह जानने कि मैं फार्म मान्य करने के लिए प्राप्त करने के लिए नहीं कर पा रहे। मैंने इसे एक साधारण परीक्षण (इसे मानना ​​सही है) पर झुकाया जो काम नहीं कर रहा है। क्या कोई यहां कोई समस्या देख सकता है?Django

>>> from django.contrib.auth.forms import AuthenticationForm 
>>> POST = { 'username': 'test', 'password': 'me', } 
>>> form = AuthenticationForm(POST) 
>>> form.is_valid() 
False 

क्या कोई वास्तविक कारण यह मान्य नहीं होगा? क्या मैं इसे गलत तरीके से उपयोग कर रहा हूं? मैंने मूल रूप से django के अपने लॉगिन दृश्य के बाद इसे मॉडल किया है।

उत्तर

37

प्रयास करें:

form = AuthenticationForm(data=request.POST) 
+0

धन्यवाद। यकीन नहीं है कि मैं django के डिफ़ॉल्ट दृश्य में कैसे चूक गया। मेरे सभी अन्य रूपों में मैं सिर्फ एक क्वार का उपयोग किए बिना, उदाहरण में POST फेंक देता हूं। कोई विचार यहाँ क्या अलग है? –

+3

यदि स्मृति सेवा करता है, तो प्रमाणीकरणफॉर्म दूसरों की तुलना में थोड़ा अलग है। Django में यहां और वहां कुछ विसंगतियां हैं। आमतौर पर मैं का उपयोग कर रूपों का दृष्टांत: प्रपत्र = MyForm (request.POST या कोई नहीं) – Brandon

2

is_valid समारोह का कोड:

return self.is_bound and not bool(self.errors) 


>>> form.errors 
{'__all__': [u'Please enter a correct username and password. Note that both fields are case-sensitive.']} 

आप विधि का कोड AuthenticationForm

def clean(self): 
    username = self.cleaned_data.get('username') 
    password = self.cleaned_data.get('password') 

    if username and password: 
     self.user_cache = authenticate(username=username, password=password) 
     if self.user_cache is None: 
      raise forms.ValidationError(_("Please enter a correct username and password. Note that both fields are case-sensitive.")) 
     elif not self.user_cache.is_active: 
      raise forms.ValidationError(_("This account is inactive.")) 
    self.check_for_test_cookie() 
    return self.cleaned_data 

की साफ दिखाई देता है तो "समस्या" है कि इस उपयोगकर्ता नाम और passowrd के साथ एक उपयोगकर्ता बाहर निकल जाता है नहीं है

+0

आप कहाँ इस is_valid देख रहे हैं:

AuthenticationForm(data=req.POST) 

तुम भी इनमें से किसी एक का उपयोग कर सकते हैं? django.forms.BaseForm? आप django का क्या संस्करण चल रहे हैं? मैं यहाँ 1.3.1 पर हूँ। https://code.djangoproject.com/browser/django/trunk/django/forms/forms: इस Django व्यवस्थापक के रूप में ही बैकएंड उपयोग कर रहा है, मैं एक मान्य उपयोगकर्ता/पास ... –

+0

ट्रंक में साथ की कोशिश की है। py # L119 या Django में 1.3.1 https://code.djangoproject.com/browser/django/tags/releases/1.3.1/django/forms/forms.py#L116 – Goin

+0

मुझे form.errors का मूल्य बताएं – Goin

13

में कुछ घंटे बिताए के बाद लग रहा "क्यों हैक कोई सत्यापन त्रुटि कर रहे हैं ?!" मैं इस पृष्ठ में चलाने: http://www.janosgyerik.com/django-authenticationform-gotchas/

AuthenticationForm के पहले तर्क नहीं डेटा है! सब पर:

def __init__(self, request=None, *args, **kwargs): 

तो thats क्यों आप आंकड़ों के req.POST पास या पहले तर्क में कुछ और पारित करने के लिए की है। यह पहले से ही जवाब में से एक में कहा गया था यहाँ का उपयोग करें:

AuthenticationForm(req,req.POST) 
AuthenticationForm(None,req.POST) 
+0

पर अच्छी कॉल 'डेटा ='। – freb