मुझे django के साथ पंजीकरण में समस्या है, मेरे विचार कोड यहां दिए गए हैं:

def register(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/')
    else:
        form = RegistrationForm()

        args = {'form': form}
        return render(request, 'users/reg_form.html', args)

, लेकिन मुझे हमेशा मिलता है:

ValueError /user/register/ पर दृश्य User.views.register ने नहीं देखा एक HttpResponse ऑब्जेक्ट लौटाएँ। यह बदले में कोई नहीं लौटा। निवेदन विधि: POST अनुरोध URL: http://127.0.0.1:3001/user/register/ Django संस्करण: 2.0.2 अपवाद प्रकार: ValueError अपवाद मान: दृश्य Users.views.register ने HttpResponse ऑब्जेक्ट नहीं लौटाया। यह लौट आया इसके बजाय कोई नहीं। अपवाद स्थान: /home/iah/.local/lib/python3.5/site-packages/django/core/handlers/base.py _get_response में, पंक्ति १३९

3
Hat hout 27 मार्च 2018, 12:29

3 जवाब

सबसे बढ़िया उत्तर

अपने कोड की जांच करें और अपने आप से पूछें कि यदि आपके पास POST अनुरोध है और फ़ॉर्म मान्य नहीं है तो क्या होगा - आप पाएंगे कि इस मामले में आपके पास कोई स्पष्ट वापसी पथ नहीं है, इसलिए फ़ंक्शन स्पष्ट रूप से None लौटाता है।

फिक्स मृत सरल है: अपने फ़ंक्शन की अंतिम दो पंक्तियों को डिडेंट करें, इसलिए जब आप फॉर्म को मान्य नहीं करते हैं तो आप प्रदान किए गए टेम्पलेट को भी वापस कर देते हैं:

def register(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/')

    else:
        form = RegistrationForm()

    # MAKE SURE WE ALWAYS RETURN A RESPONSE:
    # we end up here when it's a GET request 
    # AND when it's a POST request and the form
    # did not validate   
    args = {'form': form}
    return render(request, 'users/reg_form.html', args)
2
bruno desthuilliers 27 मार्च 2018, 09:44

आप अन्य कोड खो रहे हैं। आपका अगर स्टेटमेंट कहता है: अगर फॉर्म वैध है, तो फॉर्म को सेव करें। लेकिन क्या होगा यदि फ़ॉर्म मान्य नहीं है, क्या होगा यदि उपयोगकर्ता नाम सभी विशेष वर्ण (उदा: !@#$%%%^^) है या क्या होगा यदि उपयोगकर्ता नाम केवल 1 वर्ण लंबा है पूर्व: (उपयोगकर्ता नाम: ए)। या क्या होगा यदि पासवर्ड केवल 3 वर्ण लंबा है (उदा: pas) इन सभी परिदृश्यों में, उपयोगकर्ता को रिक्त फ़ॉर्म वापस प्राप्त करना चाहिए। आपको पंजीकरण के लिए कक्षा आधारित दृश्यों का उपयोग करने पर भी विचार करना चाहिए यह लिंक सहायता

def register(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        **if form.is_valid():** 
 # What if the form is not valid you haven't accounted for that 
            form.save()
            return redirect('/')
    else:       
 # Adding a else solves this problem. The user gets a blank form back                
        form = RegistrationForm()
        args = {'form': form}
        return render(request, 'users/reg_form.html', args)**
0
Samir Tendulkar 27 मार्च 2018, 11:08

आपको आंतरिक else ब्लॉक से प्रतिक्रिया वापस करनी होगी:

def register(request):
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect('/')
        else:
            # here 
    ...
1
awesoon 27 मार्च 2018, 09:32