2012-03-16 21 views
8

मैं जेसन को आउटपुट करके Django में एक आरईएसटी एपी बनाने की कोशिश कर रहा हूं। अगर मैं टर्मिनल में कर्ल का उपयोग कर एक POST अनुरोध करता हूं तो मुझे समस्याएं आ रही हैं। त्रुटि मैं मिलDjango POST URL त्रुटि

आप पोस्ट के माध्यम से इस URL भी कहा जाता है, लेकिन यूआरएल एक स्लेश से समाप्त नहीं होता और आप APPEND_SLASH सेट है। POST डेटा बनाए रखने के दौरान Django स्लैश URL पर रीडायरेक्ट नहीं कर सकता है। 127.0.0.1:8000/add/ (पिछला स्लैश नोट करें) पर इंगित करने के लिए अपना फॉर्म बदलें, या एपीपी END_SLASH = अपने Django सेटिंग्स में गलत सेट करें।

मेरे url.py

from django.conf.urls.defaults import patterns, include, url 
import search 

# Uncomment the next two lines to enable the admin: 
# from django.contrib import admin 
# admin.autodiscover() 

urlpatterns = patterns('', 

    url(r'^query/$', 'search.views.query'), 
    url(r'^add/$','search.views.add'), 
) 

है और मेरे विचार

# Create your views here. 
from django.http import HttpResponse 
from django.template import Context,loader 
import memcache 
import json 

def query(request): 
    data=['a','b'] 

    mc=memcache.Client(['127.0.0.1:11221'],debug=0) 
    mc.set("d",data); 

    val=mc.get("d") 

    return HttpResponse("MEMCACHE: %s<br/>ORIGINAL: %s" % (json.dumps(val),json.dumps(data))) 

def add(request): 
    #s="" 
    #for data in request.POST: 
    # s="%s,%s" % (s,data) 
    s=request.POST['b'] 
    return HttpResponse("%s" % s) 

मैं अपने Json दे रही है नहीं, लेकिन मैं समस्या ऊपर उल्लेख किया हो रही है पता नहीं है जब मैं में पोस्ट अनुरोध कर टर्मिनल

curl http://127.0.0.1:8000/add/ -d b=2 >> output.html 

हालांकि मैं django के लिए नया हूं।

उत्तर

15

सबसे पहले, सुनिश्चित करें कि आप http://127.0.0.1/add/ पर http://127.0.0.1/add पर अनुरोध भेजें।

दूसरा, आप @csrf_exempt सजावटी जोड़कर सीएसआरएफ प्रोसेसिंग से दृश्य को मुक्त करना भी चाह सकते हैं - क्योंकि आप कर्ल से उचित टोकन नहीं भेज रहे हैं।

+0

धन्यवाद बहुत। @csrf_exempt काम किया – Zabi

14

यूआरएल स्थिरता के लिए, Django की सेटिंग APPEND_SLASH है, जो हमेशा यूआरएल के अंत में एक स्लैश जोड़ती है अगर इसे शुरू करने के लिए नहीं भेजा गया था। यह सुनिश्चित करता है कि /my/awesome/url/ हमेशा /my/awesome/urlऔर/my/awesome/url/ दोनों के बजाय उस URL से परोसा जाता है।

हालांकि, Django अंत में स्लैश के साथ अंत में स्लैश के बिना स्वचालित रूप से संस्करण को पुनर्निर्देशित करके ऐसा करता है। रीडायरेक्ट्स उनके साथ अनुरोध की स्थिति नहीं लेते हैं, इसलिए जब ऐसा होता है तो आपका पोस्ट डेटा गिरा दिया जाता है।

आपको केवल यह सुनिश्चित करना है कि जब आप अपना पोस्ट भेजते हैं, तो आप इसे अंत में स्लैश के साथ संस्करण में भेजते हैं।

+0

मेरे कर्ल अनुरोध में "कर्ल http://127.0.0.1:8000/add/ -db = 2 >> output.html" मैं इसे अंत में एक स्लैश के साथ अनुरोध कर रहा हूं लेकिन यह अभी भी मुझे समस्या दे रहा है – Zabi

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