Django Tutorial Indonesia: Request dan Response

Django Tutorial Indonesia
Django Tutorial Indonesia


Django Tutorial Indonesia yang membahas mengenai Request dan Response menggunakan django framework. Setiap terjadi Request pada server django, ada beberapa hal yang berjalan. Salah satunya adalah middleware.



Tutorial Middleware Django

Middleware adalah jalan tengah antara Request dan Response. Ketika sebuah Request dibuat, ia terlebih dahulu melewati middlewares, baru masuk ke View. Selanjutnya, data dilewatkan melalui middleware sebagai Response.

Middleware bisa dikatan sebagai "plugin" tingkat rendah yang ringan untuk mengubah Request dan Response Django secara global. Setiap komponen middleware bertanggung jawab untuk melakukan beberapa fungsi tertentu. Misalnya, Django menyertakan komponen middleware AuthenticationMiddleware, yang mengaitkan user dengan Request menggunakan sessions.

Secara default, saat Anda membuat project baru, Django telah menyisipkan beberapa middleware bawaan yang langsung terintegrasi dengan project Anda. Anda bisa melihat middleware built-in django berikut ini:

Django Learning Websites
Middleware Django (Django Learning Websites)

Anda juga bisa membuat custom middleware sesuai dengan kebutuhan Anda. Seperti meng-handle Authorization/Authentication user menggunakan JWT token, improve security, dan sebagainya. Kita akan membahas di artikel selanjutnya, mengenai pembuatan custom middleware di django.

Baca juga:

Django Request dan Response

Django menggunakan object Request dan Response untuk menjalankan sebuah sistem yang telah kita buat. Saat suatu halaman terbuka, maka Django akan membuat object HttpRequest yang berisi metadata yang berkaitan dengan Request tersebut. 

Kemudian Django akan memuat View yang sesuai berdasarkan Url, dan meneruskan HttpRequest sebagai argumen ke fungsi View tersebut. Setiap View bertanggung jawab untuk mengembalikan objek HttpResponse. 

Ilustarsi Request dan Response

Sebagai ilustrasi, kita akan membuat aplikasi sederhana dalam menyimpan data sebuah produk. Langkah pembuatannya adalah sebagai berikut:
  1. Kita akan membuat app baru bernama catalog dengan menjalankan command berikut:
    python manage.py startapp catalog

    Jika berhasil, direktori baru bernama catalog sudah berhasil dibuat, dan memiliki struktur seperti berikut ini:

    Django Important Concepts
    Struktur Direktori Django

  2. Buat file baru bernama urls.py, yang berperan sebagai perantara untuk memanggil View. Isi dari file urls.py kira-kira seperti ini:
    from django.urls import path
    
    from .views import DefaultCatalogProduct
    
    app_name = 'catalog'
    urlpatterns = [
        path('default/product/', DefaultCatalogProduct.as_view(), name='default-product'),
    ]

  3. Kami menggunakan djangorestframework agar memudahkan kita dalam membuat Web API kedepannya. Anda bisa menginstall djangorestframework di virtualenv Anda, dengan menjalankan command berikut:
    pip install djangorestframework

  4. Jangan lupa untuk menambahkan apps catalog dan rest_framework di INSTALLED_APPS di file mysite/settings.py
    INSTALLED_APPS = [
        'catalog',
    
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'rest_framework'
    ]

  5. Selanjutnya kita masuk ke file Views.py. Kita akan membuat class, seperti yang sudah kita daftarkan di file urls.py tadi. Isi filenya kira-kira seperti berikut:
    from django.http import HttpResponse as Response
    from rest_framework.permissions import IsAuthenticated
    from rest_framework.views import APIView
    
    
    class DefaultCatalogProduct(APIView):
        permission_classes = (IsAuthenticated,)
    
        def get(self, request):
            user_data = request.user
            data = request.query_params
    
            return Response(f"Saya {user_data.username}, ingin mencari produk {data.get('q', '')}")

    Keterangan:
    - Kita menambah permission_classes = (IsAuthenticated,) yang berfungsi untuk membatasi akses terhadap endpoint catalog/default/product. User yang bisa mengaksesnya hanya dia yang sudah berhasil di autentikasi / berhasil login di halaman admin.
    - Anda bisa membuat superuser baru dengan command python manage.py createsuperuser. Selanjutnya, Anda bisa login ke url http://127.0.0.1:8000/admin/, dan masukan username & password Anda.
    - Kita bisa membuat custom permission_classes, seperti hanya superuser saja yang bisa mengakses atau user yang hanya memiliki email, dan sebagainya. Ini akan kita bahas di artikel berikutnya.

  6. Selanjutnya, Anda bisa mencoba mengakses url http://127.0.0.1:8000/catalog/default/product/?q=laptop di browser Anda, jika berhasil maka akan seperti gambar dibawah ini:
    How To Create a Website Using Django
    How to Create a Website Using Django

    Keterangan:
    - user_data: Variable untuk mengambil informasi data user
    - data: Variable untuk mengambil data dari query params. Sebagai contoh kita memasukkan params q sebagai query untuk mencari data produk tertentu.
    q=laptop: Query params yang bersifat dinamis tergantung input dari user. Sebagai contoh kita memasukan query laptop, untuk mencari data seputar laptop di database kita. Untuk proses pengambilan data dari database, akan kita bahas di artikel berikutnya.

Tutorial Path Argument Django

Fungsi path() memerlukan 4 argumen, 2 required (route dan view) dan 2 optional (kwargs dan name). 
  1. path() argument: route
    Route adalah string yang berisi URL. Saat memproses Request, Django mencari URL dari daftar yang paling atas hingga ke paling bawah. Django membandingkan URL yang diminta dengan setiap pola, hingga menemukan satu yang cocok.
  2. path() argument: view
    Saat Django menemukan pola URL yang cocok, ia akan memanggil fungsi View yang ditentukan dengan objek HttpRequest sebagai argumen pertama.
  3. path() argument: kwargs
    **kwargs atau Arbitrary keyword arguments merupakan istilah untuk named argumen yang tidak bisa kita tentukan jumlahnya. **kwargs berbentuk dictionary karena memiliki index dan value.
  4. path() argument: name
    Memberikan nama pada URL akan memudahkan kita dalam memanggil URL tersebut. Kita juga tidak perlu secara lengkap memanggil URL path-nya, kita hanya perlu menyebut name nya saja. Sebagai contoh, Anda bisa melakukan reverse URL seperti contoh berikut ini:
    reverse('default-product')
    reverse('default-product', args=[])
    reverse('default-product', kwargs={})


Di artikel ini kita sudah membahas mengenai Django Tutorial Indonesia: Request Dan Response. Selanjutnya kita akan membahas tentang Django Tutorial Indonesia: Model dan Admin


Terimakasih, 


 tutorialsakti.com
LihatTutupKomentar