Skip to content

Instantly share code, notes, and snippets.

@rririanto
Last active April 29, 2016 02:36
Show Gist options
  • Save rririanto/442f0590578ca3f8648aeba1e25f8762 to your computer and use it in GitHub Desktop.
Save rririanto/442f0590578ca3f8648aeba1e25f8762 to your computer and use it in GitHub Desktop.
Penjelasan Singkat tentang POST & GET Django
Penjelasan Singkat tentang POST & GET Django
POST GET
Nilai variabel tidak ditampilkan di URL | Nilai variabel ditampilkan di URL sehingga user dapat dengan mudah memasukkan nilai
| variabel baru
Lebih aman | Kurang aman
Tidak dibatasi panjang string | Dibatasi panjang string sampai 2047 karakter
Pengambilan variabel dengan request.POST.get | Pengambilan variabel dengan request.POST.get
Biasanya untuk input data melalui form | Biasanya untuk input data melalui link
Digunakan untuk mengirim data-data penting | Digunakan untuk mengirim data-data tidak penting
seperti password |
[*] Contoh dengan POST:
Script : post.html
pada script post.html sy punya 2 form yg unya method berbeda satu post dan satu lagi get
===========================================
<form action="{% url post_datanya_url %}" method="POST">{% csrf_token %}
nama<input type="text" name="nama"></input>
tgl lahir<input type="text" name="tgl_lhr"></input>
<input type="submit" name="selesai" value="Selesai"></input>
{% if sukses %}
<h2> sukses insert data </h2>
{% else %}
<h2> gagal insert data </h2>
{% endif %}
</form>
<form action="{% url post_datanya_url %}" method="GET">{% csrf_token %}
nama<input type="text" name="nama"></input>
tgl lahir<input type="text" name="tgl_lhr"></input>
<input type="submit" name="selesai" value="Selesai"></input>
{% if sukses %}
<h2> sukses insert data </h2>
{% endif %}
</form>
===========================================
nb:{% csrf_token %} explain
~ http://stackoverflow.com/questions/5207160/what-is-a-csrf-token-what-is-its-importance-and-how-does-it-work
~ https://docs.djangoproject.com/en/dev/ref/contrib/csrf/
~ http://security.stackexchange.com/questions/2525/when-should-i-not-use-csrf-protection-for-a-form
Script : urls.py
===========================================
from django.conf.urls.defaults import *
urlpatterns = patterns('admin_portal.views',
url(r'^post_datanya/$, 'post_datanya', name='post_datanya_url'),
)
===========================================
nb : ~ r'^post_datanya/$ ini adalah path url utk post data tersebut yg dimana ada mainan regex agar urlnya bs lbh tepat
sample : http://apapunurlnya/post_datanya/apapundibelakangnya ...
~ post_datanya = ini method nama yg akan ada di views
~ name='post_datanya_url' ini nnt yang di taruh di template seperti contoh {% url post_datanya_rl %} jadi kt nda perlu tulis lagi
/post_datanya/ contoh kasus : <a href="{% url post_datanya_rl %}"> sm dengan <a href="post_datanya/">
Script : models.py
===========================================
from django.db import models
class biodata(models.Model):
name = models.CharField(max_length=200)
tgl_lahir = models.CharField(max_length=200)
def __unicode__(self):
return self.name
===========================================
next
* Pada saat menekan button submit pada form yang 1 ini atau form yang mengunakan method POST yang terjadi di belakang layar ..
===========================================
http://localhost:8000/post_datanya/
POST /post_datanya/ HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://localhost:8000/post_datanya/
Cookie: csrftoken=SeKJSTHHVrFF2P9WKvJJwh8ZVzxMXunG; sessionid=e26f786398b9bac72c8411ed8023127a
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 27
#di sini dia value post/data yg di bawah ke form beda nnt sm get
[*]-> nama=abalabal&tgl_lhr=20january
HTTP/1.0 200 OK
Date: Mon, 20 May 2013 05:06:32 GMT
Server: WSGIServer/0.1 Python/2.6.5
Vary: Cookie
Content-Type: text/html; charset=utf-8
===========================================
* bagaimana dengan get ?
===========================================
#ini lah dia data yang di bawah dgn get dia bisa terlihat di bar url browser
http://localhost:8000/post_datanya/?nama=abalabal&tgl_lhr=20january
GET /post_datanya/?nama=abalabal&tgl_lhr=20january HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:20.0) Gecko/20100101 Firefox/20.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://localhost:8000/post_datanya/
Cookie: csrftoken=SeKJSTHHVrFF2P9WKvJJwh8ZVzxMXunG; sessionid=64a4c297fbc4747dee9f8017fc362d9e
Connection: keep-alive
HTTP/1.0 200 OK
Date: Mon, 20 May 2013 05:34:37 GMT
Server: WSGIServer/0.1 Python/2.6.5
Vary: Cookie
Content-Type: text/html; charset=utf-8
===========================================
sudah jelas berarti yah ? :D ok next lanjut ke views
views.py
===========================================
def post_datanya(request):
sukses = False #ini nnti sebagai tanda bahwa data berhasil di save atau tidak
#mari kita set gimana nangkap data untuk POST
if request.POST.get('selesai'): #gunakan POST.get untuk method POST di ikuti dgn attr form
nama = request.POST.get('nama') #yang dimana nama dari attr input di template yg bervalue "abalabal"
tgl = request.POST.get('tgl_lhr') #yang dimana tgl_lhr dari attr input di template yg bervalue "20january"
#insert ke db .. ini salah satu cara sy
try:
new_data = biodata()
new_data.name=nama
new_data.tgl_lahir = tgl
new_data.save()
except Exception,err:
return HttpResponse(err)
else:
sukses = True
#selanjutnya mari kita set gimana nangkap data untuk GET
if request.GET.get('selesai'): #hampir sm dgn post tp kita tgl ubah menjadi request.Get.get di ikuti dgn attr form
nama = request.GET.get('nama') #kt ganti lagi mnjadi GET.get yang dimana nama dari attr input di template yg bervalue "abalabal"
tgl = request.GET.get('tgl_lhr') #yang dimana tgl_lhr dari attr input di template yg bervalue "20january"
#insert ke db ..
try:
new_data = biodata()
new_data.name=nama
new_data.tgl_lahir = tgl
new_data.save()
except Exception,err:
return HttpResponse(err)
else:
sukses = True
#tentang ini bisa di lihat penjelasannya di sini https://docs.djangoproject.com/en/dev/topics/http/shortcuts/
return render_to_response('post.html', locals(), context_instance=RequestContext(request))
===========================================
Setelah di insert kita mempunyai var sukses yg akn di bawah ke template yang terset menjadi True
dan jika True maka <h2> sukses insert data </h2> akan tampil
{% if sukses %}
<h2> sukses insert data </h2>
{% endif %}
Kesimpulan :
jadi di django kl kita ingin mengunakan POST berarti cara nangkap datanya adalah nama = request.POST.get('nama') kl get
nama = request.GET.get('nama') . ok kl ada salah dan lebihnya mohon maaf :D smg bs membantu
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment