Django - POST अनुरोध से मान ले रहा है


84

मेरे पास निम्नलिखित django टेम्पलेट है (http: // IP / व्यवस्थापक / प्रारंभ / जिसे एक काल्पनिक दृश्य को सौंपा गया है जिसे देखें:)

{% for source in sources %}
  <tr>
    <td>{{ source }}</td>

    <td>
    <form action="/admin/start/" method="post">
      {% csrf_token %}
      <input type="hidden" name="{{ source.title }}">
      <input type="submit" value="Start" class="btn btn-primary">
    </form>
    </td>

  </tr>
{% endfor %}

sourcesहै objects.all()एक Django मॉडल को ध्यान में रखते संदर्भित किया जा रहा। जब भी एक "स्टार्ट" सबमिट इनपुट पर क्लिक किया जाता है, मैं चाहता हूं कि "प्रारंभ" दृश्य {{ source.title}}किसी दिए गए पृष्ठ पर लौटने से पहले फ़ंक्शन में डेटा का उपयोग करें । मैं पायथन चरों में POSTed (इस मामले में, छिपे हुए इनपुट में) जानकारी कैसे एकत्र करूं?

जवाबों:


145

अनुरोध ऑब्जेक्ट्स के बारे में पढ़ें जो आपके विचार प्राप्त करते हैं: https://docs.djangoproject.com/en/dev/ref/request-response/#httprequest-objects

इसके अलावा आपके छिपे हुए क्षेत्र को एक विश्वसनीय नाम और फिर एक मूल्य चाहिए:

<input type="hidden" name="title" value="{{ source.title }}">

फिर एक दृश्य में:

request.POST.get("title", "")

मैं Django प्रपत्रों का उपयोग करता हूं जहां मेरे पास एक स्वतंत्र नहीं है inputऔर बस एक {{ form }}और मेरे फॉर्म में केवल एक पाठ इनपुट (charfield) है। मैं इसके डेटा तक कैसे पहुंच सकता हूं?
नाइटविट

@Nitwit nameगुण उस संपत्ति का नाम होगा जिसे आपने charfield को सौंपा था। यदि आपका 100% F12 दबाए नहीं है, जबकि ब्राउज़र लोड किए गए फॉर्म के साथ है और इनपुट तत्व का चयन करके देखें कि Django ने क्या नाम दिया है।
जेम्स बेलबाई

13

यदि आपको सामने के छोर पर कुछ करने की आवश्यकता है तो आप अपने फॉर्म की ऑनसबमिट घटना पर प्रतिक्रिया दे सकते हैं। यदि आप केवल व्यवस्थापन / प्रारंभ करने के लिए पोस्ट कर रहे हैं, तो आप अनुरोध ऑब्जेक्ट के माध्यम से अपने दृश्य में पोस्ट चर का उपयोग कर सकते हैं। request.POST जो पोस्ट वैरिएबल का एक शब्दकोश है


मेरे द्वारा पूछे जाने से पहले दूसरे उत्तर ने मुझे एक समस्या के बारे में बताया, जो मैं आपसे (नाम / मूल्य HTML चयनकर्ताओं की परिभाषाएँ) पूछने जा रहा था, इसलिए मैं आगे जाऊंगा और उस चिह्न को स्वीकार करूँगा। यद्यपि कि आपकी इस सहायता के लिए धन्यवाद। :)
रान्डेल मा

2

Django रूपों के लिए आप ऐसा कर सकते हैं;

form = UserLoginForm(data=request.POST) #getting the whole data from the user.
user = form.save() #saving the details obtained from the user.
username = user.cleaned_data.get("username") #where "username" in parenthesis is the name of the Charfield (the variale name i.e, username = forms.Charfield(max_length=64))

उत्तर में UserLoginForm फॉर्म का नाम है
इरफान वानी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.