Python - Panduan CGI Programming untuk Pemula
Hai di sana, para penyihir Python masa depan! Saya sangat gembira untuk menjadi pemandu anda dalam perjalanan yang menarik ini ke dunia programming CGI dengan Python. Sebagai seseorang yang telah mengajar ilmu komputer selama bertahun-tahun, saya bisa memberitahu anda bahwa CGI adalah seperti saus rahasia yang membuat aplikasi web anda menjadi hidup. Jadi, mari kita kancingkan lengan dan menyelam ke dasar!
Apa itu CGI?
CGI adalah singkatan dari Common Gateway Interface. Saya tahu itu terdengar seperti istilah yang rumit, tetapi pikirkan tentang hal ini sebagai penerjemah antara server web anda dan skrip Python anda. Ini seperti memiliki penerjemah yang ramah yang membantu server anda dan kode anda berkomunikasi secara lancar.
CGI memungkinkan kita untuk membuat halaman web dinamis yang dapat merespon input pengguna. Bayangkan sebuah situs web yang menyapa anda dengan nama atau menampilkan konten yang dipersonalkan - itu adalah keajaiban CGI yang bekerja!
Penjelajahan Web
Sebelum kita masuk ke detil-detil CGI, mari kita lihat secara singkat bagaimana penjelajahan web bekerja. Ketika anda mengetikkan URL di browser anda, ini yang terjadi:
- Browser anda mengirimkan permintaan ke server web.
- Server web memproses permintaan.
- Server mengirimkan tanggapan, biasanya dalam bentuk halaman HTML.
- Browser anda menampilkan HTML ini, menampilkan halaman web yang anda lihat.
CGI masuk ke permainan ketika kita ingin menghasilkan konten dinamis di langkah 3.
Diagram Arsitektur CGI
Berikut adalah diagram sederhana untuk memvisualisasikan bagaimana CGI pasang di arsitektur web:
+-------------+ HTTP Request +-------------+
| Browser | -----------------> | Web Server |
| | <----------------- | |
+-------------+ HTTP Response +-------------+
|
| CGI
v
+-------------+
| CGI Script |
| (Python) |
+-------------+
Dukungan dan Konfigurasi Server Web
Sebagian besar server web mendukung CGI, termasuk Apache dan Nginx. Untuk menggunakan CGI dengan Python, anda perlu mengkonfigurasi server anda untuk menjalankan skrip Python. Ini biasanya melibatkan pengaturan direktori khusus untuk skrip CGI dan memberitahu server untuk memperlakukan file di direktori ini sebagai eksekutabel.
Contohnya, di Apache, anda mungkin menambahkan sesuatu seperti ini ke konfigurasi anda:
<Directory /var/www/cgi-bin>
Options ExecCGI
AddHandler cgi-script .py
</Directory>
Ini memberitahu Apache untuk menjalankan file .py di direktori /var/www/cgi-bin sebagai skrip CGI.
Program CGI Pertama
Mari kita tulis program CGI pertama kita! Kita akan memulai dengan contoh klasik "Hello, World!" Buat file bernama hello.py
di direktori CGI anda:
#!/usr/bin/env python3
print("Content-Type: text/html")
print()
print("<html>")
print("<head>")
print("<title>Hello World - Program CGI Pertama</title>")
print("</head>")
print("<body>")
print("<h2>Hello World! Ini adalah program CGI pertama saya</h2>")
print("</body>")
print("</html>")
Mari kita pecahkan ini:
- Baris pertama memberitahu server untuk menggunakan Python untuk menjalankan skrip ini.
-
Content-Type: text/html
adalah header HTTP yang memberitahu browser kita mengirimkan HTML. -
print()
kosong memisahkan header dari badan tanggapan. - Yang tersisa adalah hanya HTML yang kita hasilkan secara dinamis.
Ketika anda mengakses skrip ini melalui browser anda, anda seharusnya melihat halaman yang mengatakan "Hello World! Ini adalah program CGI pertama saya".
Header HTTP
Dalam programming CGI, sangat penting untuk mengirimkan header HTTP yang benar sebelum konten anda. Header yang paling umum adalah Content-Type
, yang memberitahu browser jenis data yang anda kirimkan. Berikut adalah beberapa contoh:
Content Type | Deskripsi |
---|---|
text/html | Konten HTML |
text/plain | Teks biasa |
image/jpeg | Gambar JPEG |
application/json | Data JSON |
Selalu ingat untuk mengirimkan header Content-Type yang sesuai sebelum konten anda!
Variabel Lingkungan CGI
Skrip CGI memiliki akses ke berbagai variabel lingkungan yang menyediakan informasi tentang permintaan. Berikut adalah skrip yang menampilkan beberapa dari variabel ini:
#!/usr/bin/env python3
import os
print("Content-Type: text/html")
print()
print("<html><body>")
print("<h2>Variabel Lingkungan:</h2>")
for param in os.environ.keys():
print(f"<b>%20s</b>: {os.environ[param]}<br>" % (param))
print("</body></html>")
Skrip ini akan menampilkan semua variabel lingkungan yang tersedia untuk skrip CGI anda, termasuk hal seperti jenis browser pengguna, nama server, dan banyak lagi.
Metode GET dan POST
Ada dua metode utama untuk mengirimkan data ke skrip CGI: GET dan POST. Mari kita lihat kedua metode ini:
Metode GET
Metode GET mengirimkan data sebagai bagian dari URL. Berikut adalah contoh sederhana:
#!/usr/bin/env python3
import cgi
print("Content-Type: text/html")
print()
form = cgi.FieldStorage()
name = form.getvalue('name', 'Dunia')
print("<html><body>")
print(f"<h2>Hello, {name}!</h2>")
print("</body></html>")
Anda dapat mengakses skrip ini dengan URL seperti http://serveranda.com/cgi-bin/hello.py?name=Alice
, dan itu akan mengatakan "Hello, Alice!".
Metode POST
Metode POST mengirimkan data di badan permintaan HTTP. Ini biasanya digunakan untuk formulir. Berikut adalah contoh:
#!/usr/bin/env python3
import cgi
print("Content-Type: text/html")
print()
form = cgi.FieldStorage()
name = form.getvalue('name', 'Dunia')
email = form.getvalue('email', 'Tidak disediakan')
print("<html><body>")
print(f"<h2>Hello, {name}!</h2>")
print(f"<p>Email anda adalah: {email}</p>")
print("</body></html>")
Skrip ini dapat digunakan dengan formulir HTML yang menggunakan metode POST.
Penanganan Element Form Berbagai
CGI dapat menangani berbagai element form. Mari kita lihat beberapa contoh:
Checkbox
#!/usr/bin/env python3
import cgi
print("Content-Type: text/html")
print()
form = cgi.FieldStorage()
hobbies = form.getlist('hobby')
print("<html><body>")
print("<h2>Hobi anda:</h2>")
for hobby in hobbies:
print(f"<p>{hobby}</p>")
print("</body></html>")
Tombol Radio
#!/usr/bin/env python3
import cgi
print("Content-Type: text/html")
print()
form = cgi.FieldStorage()
gender = form.getvalue('gender', 'Tidak ditentukan')
print("<html><body>")
print(f"<h2>Jenis kelamin anda: {gender}</h2>")
print("</body></html>")
Area Teks
#!/usr/bin/env python3
import cgi
print("Content-Type: text/html")
print()
form = cgi.FieldStorage()
message = form.getvalue('message', 'Tidak ada pesan yang disediakan')
print("<html><body>")
print("<h2>Pesan anda:</h2>")
print(f"<p>{message}</p>")
print("</body></html>")
Kotak Drop Down
#!/usr/bin/env python3
import cgi
print("Content-Type: text/html")
print()
form = cgi.FieldStorage()
country = form.getvalue('country', 'Tidak dipilih')
print("<html><body>")
print(f"<h2>Negara anda: {country}</h2>")
print("</body></html>")
Menggunakan Cookie di CGI
Cookie adalah cara untuk menyimpan potongan data kecil di sisi klien. Ini berguna untuk mengingatkan preferensi pengguna atau menjaga informasi sesi. Berikut ini cara anda bekerja dengan cookie di CGI:
Menyetel Cookie
#!/usr/bin/env python3
import cgi
from http import cookies
import datetime
# Buat cookie
c = cookies.SimpleCookie()
c['lastvisit'] = str(datetime.datetime.now())
c['lastvisit']['expires'] = 365 * 24 * 60 * 60 # kadaluarsa dalam setahun
print(c) # Ini mencetak header Set-Cookie
print("Content-Type: text/html")
print()
print("<html><body>")
print("<h2>Cookie ditetapkan!</h2>")
print("</body></html>")
Mengambil Cookie
#!/usr/bin/env python3
import os
from http import cookies
print("Content-Type: text/html")
print()
if 'HTTP_COOKIE' in os.environ:
cookie_string = os.environ.get('HTTP_COOKIE')
c = cookies.SimpleCookie()
c.load(cookie_string)
lastvisit = c.get('lastvisit')
if lastvisit:
print(f"<h2>Kunjungan terakhir anda adalah: {lastvisit.value}</h2>")
else:
print("<h2>Ini adalah kunjungan anda pertama!</h2>")
else:
print("<h2>Ini adalah kunjungan anda pertama!</h2>")
Contoh Unggahan File
Penanganan unggahan file adalah agak kompleks, tetapi berikut adalah contoh sederhana:
#!/usr/bin/env python3
import cgi, os
import cgitb; cgitb.enable()
print("Content-Type: text/html")
print()
form = cgi.FieldStorage()
# Dapatkan nama file di sini.
fileitem = form['filename']
# Test jika file diunggah
if fileitem.filename:
# hapus path awal dari nama file untuk
# menghindari serangan penjelajahan direktori
fn = os.path.basename(fileitem.filename)
open('/tmp/' + fn, 'wb').write(fileitem.file.read())
message = f'File "{fn}" diunggah berhasil'
else:
message = 'Tidak ada file yang diunggah'
print(f"""\
<html>
<body>
<p>{message}</p>
</body>
</html>
""")
Cara Mengaktifkan kotak dialog "Unduhan File"?
Untuk memicu unduhan file, anda perlu menyetel header yang sesuai:
#!/usr/bin/env python3
import os
filename = "contoh.txt" # Ini akan menjadi nama file anda
filepath = "/path/to/your/file" # Ini akan menjadi path ke file anda
print("Content-Type: application/octet-stream")
print(f"Content-Disposition: attachment; filename={filename}")
print() # Baris kosong, akhir dari header
# Sekarang kirim konten file
with open(os.path.join(filepath, filename), 'rb') as f:
print(f.read())
Skrip ini menyetel Content-Type ke application/octet-stream
, yang memberitahu browser untuk mendownload file bukannya menampilkannya. Header Content-Disposition menyarankan nama file untuk unduhan.
Dan itu saja, folks! Kita telah membahas dasar-dasar programming CGI dengan Python. Ingat, praktek membuat perfect, jadi jangan takut untuk bereksperimen dengan contoh ini dan membuat Anda sendiri. Happy coding, dan semoga skrip CGI anda selalu berjalan mulus!
Credits: Image by storyset