Django - POST isteğinden değer alma


84

Aşağıdaki django şablonuna sahibim (http: // IP / admin / start /, görünüm adı verilen varsayımsal bir görünüme atandı):

{% 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 %}

sourcesolan objects.all()bir Django modeli görünümünde başvuruluyor. Bir "Başlat" gönderim girdisine tıklandığında, "başlat" görünümünün, {{ source.title}}işlenmiş bir sayfayı döndürmeden önce verileri bir işlevde kullanmasını istiyorum . Python değişkenlerine POST (bu durumda gizli girişte) bilgileri nasıl toplayabilirim?

Yanıtlar:


145

Görünümlerinizin aldığı istek nesneleri hakkında bilgi edinin: https://docs.djangoproject.com/en/dev/ref/request-response/#httprequest-objects

Ayrıca gizli alanınızın güvenilir bir isme ve ardından bir değere ihtiyacı vardır:

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

Sonra bir görünümde:

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

Bağımsız inputve sadece {{ form }}a'ya sahip olmadığım ve formumun yalnızca bir metin girişine (charfield) sahip olduğu Django Formlarını kullanıyorum . verilerine nasıl erişebilirim?
Nitwit

@Nitwit nameöznitelik, karakter alanını atadığınız mülkün adı olacaktır. % 100 değilse, tarayıcıda form yüklü iken F12'ye basın ve Django'nun name niteliğine ne verdiğini görmek için girdi öğesini seçin.
James Bellaby

13

Ön uçta bir şey yapmanız gerekirse, formunuzun onsubmit olayına yanıt verebilirsiniz. Yalnızca admin / start'a mesaj gönderiyorsanız, istek nesnesi aracılığıyla görünümünüzdeki gönderi değişkenlerine erişebilirsiniz. Gönderi değişkenlerinin sözlüğü olan request.POST


Diğer cevap, soracağım bir problemde bana yardımcı oldu (ad / değer html seçicilerinin tanımları), sormadan önce, bu yüzden devam edip bunu kabul ettiğini işaretleyeceğim. Yine de yardımın için teşekkürler. :)
Randall Ma

2

Django formları için bunu yapabilirsiniz;

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))

Yanıttaki UserLoginForm, formun adıdır
Irfan wani
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.