Routing and View Functions
Pendahuluan
Hai Stupenss!, kita bertemu kembali, Setelah mempelajari Introduction to Flask pada materi sebelumnya, kali ini kita akan membahas topik yang tak kalah pentingnya, yaitu Routing dan Fungsi View pada Flask. Routing dan Fungsi View adalah dua konsep utama dalam membuat aplikasi web dengan Flask, yang memungkinkan kita untuk menentukan alur navigasi dan tampilan pada website kita. Siap untuk mengeksplorasi lebih jauh tentang topik ini? Yuk, mari kita mulai!
Apa Itu Routing ?
Jadi setiap URL pada aplikasi Flask dapat dianggap sebagai sebuah endpoint, dimana pengguna dapat mengakses halaman web atau sumber daya yang berbeda pada aplikasi. Misalnya, sebuah aplikasi e-commerce mungkin memiliki endpoint yang berbeda untuk halaman utama, halaman kategori produk, halaman detail produk, halaman keranjang belanja, dan sebagainya.
Dalam Flask, routing dapat didefinisikan dengan menggunakan decorator @app.route() pada fungsi view. Decorator ini memungkinkan kita untuk menentukan URL endpoint, serta method HTTP yang akan diproses oleh fungsi view yang terkait. Contohnya, jika kita ingin membuat halaman utama pada aplikasi Flask, kita dapat menuliskan fungsi view dengan decorator @app.route('/') .
Jadi secara sederhana, routing adalah mekanisme untuk menentukan cara aplikasi Flask memproses permintaan pengguna dan menampilkan konten yang relevan pada halaman web. Pada flask sendiri routing dapat dibedakan menjadi 2 yaitu static dan dinamic routing, apa itu?
Static Routing
Nah Stupenss, Static routing pada Flask menangani URL yang selalu sama dan menghasilkan konten yang statis. Ini berarti bahwa setiap kali URL yang sama diterima, konten yang sama akan dihasilkan. Contohnya, ketika kamu memuat halaman utama website yang sama, kontennya selalu tetap sama.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return '<h1>Hello World!</h1>'
@app.route('/about')
def about():
return '<h1>Halaman About</h1>'
@app.route('/contact')
def contact():
return '<h1>Halaman Contact</h1>'
Nah baris kode di atas merupakan contoh implementasi dari routing statis, dapat dilihat dari penggunaan route yang sama (tidak berubah) dan isi kontennya juga tetap.
Halaman contact dan about menghasilkan konten yang sama, dan menggunakan route yang tetap, dan tidak ada parameter tambahan.
Dynamic Routing
Sedangkan dynamic routing pada Flask menangani URL yang berbeda dan menghasilkan konten yang dinamis. Hal ini memungkinkan Flask untuk menangani URL dengan cara yang lebih fleksibel dan menghasilkan konten yang berbeda-beda berdasarkan data yang diberikan. Contohnya, ketika kamu mencari produk pada website e-commerce, hasil pencarian yang dihasilkan akan berbeda-beda berdasarkan data pencarian yang diberikan.
from flask import Flask
app = Flask(__name__)
@app.route('/profile/<username>')
def profile(username):
return '<h1>Halaman Profile {}</h1>'.format(username)
Coba perhatikan stupenss, contoh di atas, nilai parameter username diberikan dalam URL, dan Flask akan mengambil nilai tersebut dan menggunakannya untuk menghasilkan konten halaman profil pengguna yang berbeda-beda tergantung pada nilai parameter username .
Secara teknis, perbedaan antara static routing dan dynamic routing pada Flask terletak pada penggunaan parameter dinamis di URL. Dalam static routing, URL ditentukan dengan cara yang statis dan tidak memerlukan parameter dinamis.
Sedangkan dalam dynamic routing, URL didefinisikan dengan menggunakan parameter dinamis seperti /<parameter> atau /<parameter>/<subparameter> .
Berikut ada perbedaan antara dynamic routing dengan static routing :
|
Static Routing |
Dynamic Routing |
Jenis URL |
URL selalu sama |
URL bisa berbeda-beda tergantung pada parameter yang diberikan |
Jenis Konten |
Konten statis |
Konten dinamis |
URL Handling |
URL ditentukan dengan cara statis |
URL ditentukan dengan menggunakan parameter dinamis |
Contoh Penggunaan |
Menampilkan halaman utama website |
Menampilkan hasil pencarian produk pada website e-commerce |
Contoh Kode |
@app.route('/about') def about(): return 'Ini adalah halaman about!'
|
@app.route('/product/<product_id>') def product(product_id): return 'Ini adalah produk {}!'.format(product_id)
|
Variable Rule
Nah stupenss dari contoh dynamic routing diatas kita bisa perhatikan terdapat parameter tambahan di belakang route yang biasanya dinamakan variable rule. Variable rule pada Flask merupakan salah satu fitur yang memungkinkan pengguna untuk membuat dynamic routing yang lebih kompleks dan fleksibel. Dalam dynamic routing, kita dapat menambahkan variabel rule di dalam URL, sehingga memungkinkan kita untuk menentukan URL secara dinamis dan membuat aplikasi web yang lebih interaktif nih stupenss.
Dalam variabel rule, kita dapat menambahkan parameter dinamis di dalam URL dengan menuliskan tanda <> pada bagian URL yang ingin dijadikan parameter. Setelah itu, kita dapat menentukan nama parameter yang ingin kita gunakan dan bagaimana parameter tersebut akan diolah dalam kode Python.
Contohnya, jika kita ingin membuat dynamic routing untuk menampilkan halaman profil pengguna dengan menggunakan ID pengguna sebagai parameter, kita dapat menambahkan variabel rule dengan URL /user/<user_id> dan menentukan parameter user_id sebagai parameter dinamis.
Dalam kode Python, kita dapat menambahkan fungsi dengan nama user_profile dan memasukkan parameter user_id sebagai argumen. Kita juga dapat mengolah parameter tersebut dalam kode Python, misalnya dengan melakukan query ke database untuk mendapatkan informasi pengguna yang sesuai dengan ID yang diberikan.
@app.route('/user/<user_id>')
def profile(user_id):
return '<h1>Halaman Profile {}</h1>'.format(user_id)
Dengan variabel rule, kita dapat membuat aplikasi web yang lebih dinamis dan interaktif, serta memberikan pengalaman yang lebih baik bagi pengguna. Oleh karena itu, variabel rule merupakan salah satu fitur yang sangat penting dalam pengembangan aplikasi web dengan Flask.
pada variabel ini stupenss dapat menambahkan 5 jenis tipe variabel pada python yaitu :
Tipe data |
Keterangan |
string |
menerima teks apapun tanpa slash (default) |
int |
menerima bilangan bulat |
float |
seperti int tetapi untuk nilai desimal |
path |
seperti default string tetapi juga menerima garis miring |
any |
cocok dengan salah satu item yang disediakan |
uuid |
menerima string UUID |
Unique URLs
Hai stupenss, selanjutnya coba kalian perhatikan baris kode berikut
@app.route('/projects/')
def projects():
return 'The project page'
@app.route('/about')
def about():
return 'The about page'
kalian bisa melihat apa perbedaannya? yap betul, perbedaannya terletak pada tanda slash atau garis miring, pada route projects memiliki slash pada akhir rutenya sedangkan pada about tidak memiliki slash lalu apa fungsinya? jadi stupenss jika kalian mengakses router projects tanpa tanda slash di belakang /projects maka secara otomatis flask akan me-redirect projects menjadi /projects/ , sedangkan jika kita mengakses route about dan diapit slash /about/ maka akan memunculkan halaman 404 atau page not found, maka sangat dianjurkan untuk menggunakan tanda slash di belakang route untuk menghindari redirecting ke halaman 404.
URL Building
Selanjutnya kita akan belajar mengenai URL building, url building adalah
URL Building adalah salah satu fitur penting dari Flask yang memungkinkan kita untuk membuat tautan dinamis pada aplikasi web kita. Ini berarti kita dapat membuat tautan yang mengarah ke halaman lain di aplikasi web, dan setiap tautan tersebut dapat menerima argumen dinamis yang akan digunakan untuk menampilkan konten yang sesuai. Misalnya, kita ingin membuat tautan untuk menampilkan detail produk dalam toko online. Dalam hal ini, kita dapat membuat tautan yang mengarah ke halaman produk, dengan mengambil ID produk sebagai argumen dinamis. Dengan cara ini, setiap tautan yang dihasilkan akan memuat halaman produk yang sesuai dengan ID produk yang dipilih. Untuk membuat tautan dinamis seperti ini, kita perlu menggunakan fungsi url_for() pada Flask. Fungsi ini memungkinkan kita untuk membuat tautan dengan cara yang aman dan benar-benar dinamis.
Pertama-tama, kita perlu mengimpor modul url_for dari Flask.
from flask import url_for
Kemudian, kita dapat menggunakan fungsi url_for() untuk membuat tautan dinamis. Misalnya, jika kita ingin membuat tautan untuk halaman produk, kita dapat menggunakan fungsi berikut:
url_for('product_detail', product_id=123)
Dalam contoh ini, 'product_detail' adalah nama fungsi tampilan yang akan menampilkan halaman produk, dan product_id=123 adalah argumen dinamis yang akan digunakan untuk menampilkan produk yang sesuai dengan ID produk yang dipilih.
Perlu diingat bahwa nama fungsi tampilan yang digunakan dalam url_for() harus sesuai dengan nama fungsi tampilan yang telah kita definisikan sebelumnya. Jika kita belum membuat fungsi tampilan untuk halaman produk, kita harus membuatnya terlebih dahulu.
Setelah kita membuat tautan dinamis dengan url_for() , kita dapat menggunakan tautan tersebut dalam template HTML dengan sintaks {{ url_for('nama_fungsi', **args) }} . Misalnya, jika kita ingin membuat tautan untuk halaman produk pada template HTML, kita dapat menggunakan sintaks berikut:
<a href="{{ url_for('product_detail', product_id=123) }}">Lihat Detail Produk</a>
Dalam contoh ini, {{ url_for('product_detail', product_id=123) }} akan menghasilkan tautan dinamis yang mengarah ke halaman produk dengan ID produk yang sama dengan 123.
Secara keseluruhan, URL Building pada Flask memungkinkan kita untuk membuat tautan dinamis yang sangat fleksibel dan dapat disesuaikan dengan konten yang ingin kita tampilkan pada aplikasi web kita. Dengan menggunakan url_for() , kita dapat membuat tautan yang aman dan mudah dipelihara, yang akan membantu meningkatkan pengalaman pengguna pada aplikasi web kita.
Quiz
1. Apa fungsi dari routing pada Flask?
a. Membuat tautan dinamis pada aplikasi web.
b. Menampilkan tampilan pada aplikasi web.
c. Menentukan alamat URL pada aplikasi web.
d. Menghubungkan aplikasi web dengan database.
2. Bagaimana cara membuat routing pada Flask?
a. Dengan menggunakan fungsi app.route() .
b. Dengan menambahkan alamat URL pada HTML template.
c. Dengan menggunakan fungsi url_for() .
d. Dengan mengimpor modul routing pada Flask.
3. Apa yang dimaksud dengan view pada Flask?
a. Tampilan pada aplikasi web.
b. Fungsi yang menangani permintaan HTTP pada aplikasi web. c. Alamat URL pada aplikasi web.
d. Fungsi yang digunakan untuk membuat tautan dinamis pada aplikasi web.
4. Bagaimana cara membuat view pada Flask?
a. Dengan menambahkan fungsi pada file views.py .
b. Dengan menambahkan alamat URL pada HTML template. c. Dengan menggunakan fungsi url_for() .
d. Dengan mengimpor modul view pada Flask.
5. Apa fungsi dari url_for() pada Flask?
a. Menghasilkan alamat URL pada aplikasi web.
b. Membuat tautan dinamis pada aplikasi web.
c. Menampilkan tampilan pada aplikasi web.
d. Menghubungkan aplikasi web dengan database.
Referensi
https://flask.palletsprojects.com/en/2.3.x/quickstart/?highlight=routing
https://hackersandslackers.com/flask-routes/
https://www.turing.com/kb/build-flask-routes-in-python#installing-flask
https://explore-flask.readthedocs.io/en/latest/views.html#url-converters
https://www.javatpoint.com/flask-app-routing
https://ar-android.github.io/belajar-flask/tutorial/flask-routing.html