Last active
April 29, 2016 02:36
-
-
Save rririanto/442f0590578ca3f8648aeba1e25f8762 to your computer and use it in GitHub Desktop.
Penjelasan Singkat tentang POST & GET Django
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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