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.