# Dokumentasi Django 4.2.9.dev20231204082947

# Menulis aplikasi Django pertama anda, bagian 1

Mari kita belajar berdasarkan contoh.

Melalui tutorial ini, kami akan memandu anda melalui pembuatan aplikasi jejak pendapat dasar.

Dia akan terdiri dari dua bagian:

- Situs umum yang membiarkan orang melihat jejak pendapat dan memilih mereka.
- Situs admin yang membiarkan anda menambah, merubah, dan menghapus jejak pendapat.

Kami akan beranggapan anda telah mempunyai Django installed. Anda dapat memberitahu Django terpasang dan versi mana dengan menjalankan perintah berikut dalam sebuah shell prompt (ditunjukkan oleh awalan $):

/ 

    $ python -m django --version

    ...\> py -m django --version

Jika Django telah terpasang, anda harus melihat versi dari pemasangan anda. Jika dia tidak, anda akan mendapatkan kesalahan mengatakan "Tidak ada modul bernama django".

Tutorial ini ditulis untuk Django 4.2, yang mendukung Python 3.8 dan terakhir. Jika versi Django tidak cocok, anda dapat mengacu pada tutorial untuk version Django anda dengan menggunakan pengganti versi terletak di pojok kanan bawah dari halaman ini, atau perbaharui Django ke versi terbaru. Jika anda sedang menggunakan versi terlama Python, periksa Versi Phyton apa dapat Saya gunakan dengan Django? untuk menemukan kesesuaian versi dari Django.

Lihat How to install Django untuk saran bagaimana memindahkan versi lama Django dan memasang satu yang baru.

Dimana mendapatkan bantuan:

Jika anda memiliki masalah melalui tutorial ini, harap geser ke Getting Help bagian dari FAQ.

## Membuat proyek

Jika ini adalah pertama kali anda menggunakan Django, anda harus berhati-hati dari beberapa pengaturan awal. Yaitu, anda butuh membangkitkan-otomatis beberapa kode yang membangun Django project -- kumpulan dari pengaturan untuk contoh DJango, termasuk konfigurasi basisdata, pilihan khusus-Django dan pengaturan khusus-aplikasi.

Dari baris perintah, `cd` kedalam direktori dimana anda ingin menyimpan kode anda, lalu jalankan perintah berikut:

/ 

    $ django-admin startproject mysite

    ...\> django-admin startproject mysite

Ini akan membuat direktori `mysite` di direktori anda saat ini. Jika itu tidak bekerja, lihat Masalah menjalankan django-admin.

Catatan

Anda akan butuh menghindari penamaan proyek setelah memasang-tetap komponen Phyton atau Django. Khususnya, ini berarti anda harus menghindari menggunakan nama seperti `django` (yang akan bertentangan dengan Django itu sendiri) atau `test` (yang bertentangan dengan paket Phyton memasang-tetap).

Dimana seharusnya kode ini tinggal?

Jika latar belakang anda adalah PHP tua murni (dengan tidak menggunakan kerangka kerja moderen), anda mungkin terbiasa menaruh kode dibawah akar dokumen peladen jaringan (di tempat seperti `/var/www`). Dengan Django, anda tidak perlu melakukan itu. Itu bukan ide bagus menaruh apapun dari kode Python ini dalam akar dokumen peladen jaringan anda, karena itu beresiko kemungkinan orang mungkin dapat melihat tampilan kode anda melalui jaringan. Itu tidak bagus untuk keamanan.

Taruh kode anda di beberapa direktori diluar akar dokumen, seperti `/home/mycode`.

Let's look at what `startproject` created:

    mysite/
        manage.py
        mysite/
            __init__.py
            settings.py
            urls.py
            asgi.py
            wsgi.py

Berkas ini adalah:

- Direktori akar terluar `mysite/` adalah wadah untuk proyek anda. Namanya tidak masalah pada Django; anda dapat menamai kembali itu pada apapun anda sukai.
- `manage.py`: Sebuah kegunaan baris-perintah yang membiarkan anda berinteraksi dengan proyek Django ono di beragam jalan. Anda dapat membaca semua rincian tentang `manage.py` di django-admin dan manage.py.
- Direktori `mysite/` sebelah dalam adalah paket Phyton sesungguhnya untuk proyek anda. Namanya adalah nama paket Phyton anda akan butuh untuk digunakan mengimpor apapun didalamnya (sebagai contoh `mysite.urls`).
- `mysite/__init__.py`: Sebuah berkas kosong yang memberitahu Python bahwa pelipat ini harus mempertimbangkan paket Python. Jika anda adalah pemula Python, baca more about packages di dokumen resmi Python.
- `mysite/settings.py`: Pengaturan/konfigurasi untuk proyek Django ini. Pengaturan Django akan mengatakan anda semua tentang bagaimana pengaturan bekerja.
- `mysite/urls.py`: Deklarasi URL untuk proyek Django ini; "tabel isi" dari situs Ditenagai-Django anda. Anda dapat membaca lebih tentang URL di Pengirim URL.
- `mysite/asgi.py`: Sebuah titik-masukan untukpeladen jaringan cocok-ASGI untuk melayani proyek anda. Lihat Bagaimana mengembangkan dengan ASGI untuk rincian lebih.
- `mysite/wsgi.py`: Sebuah titik-masukan untuk peladen jaringan sesuai-WSGI untuk meladeni proyek anda. Lihat Bagaimana menyebarkan dengan WSGI untuk lebih rinci.

## Peladen pengembangan

Mari kita periksa proyek Django anda bekerja. Perubahan di dalam direktori `mysite` terluar, jika anda belum siap, dan jalankan perintah berikut:

/ 

    $ python manage.py runserver

    ...\> py manage.py runserver

Anda akan melihat keluaran berikut pada baris perintah:

    Performing system checks...

    System check identified no issues (0 silenced).

    You have unapplied migrations; your app may not work properly until they are applied.
    Run 'python manage.py migrate' to apply them.

    Desember 04, 2023 - 15:50:53
    Django version 4.2, using settings 'mysite.settings'
    Starting development server at http://127.0.0.1:8000/
    Quit the server with CONTROL-C.

Catatan

Abaikan peringatan tentang perpindahan basisdata tidak diberlakukan untuk sekarang; kami akan berurusan dengan basisdata segera.

Anda telah memulai peladen pengembangan Django, peladen jaringan ringan ditulis dalam Python. Kami telah menyertakan ini dalam Django sehingga anda dapt mengembangkan hal-hal dengan cepat, tanpa harus berurusan dengan konfigurasi peladen produksi-- seperti Apache -- sampai anda siap untuk produksi.

Sekarang adalah waktu bagus untuk dicatat: jangan gunakan peladen ini dalam dalam segala hal yang menyerupai lingkungan produksi. Itu hanya diperuntukkan untuk penggunaan selagi pengembangan. (Kami berada di bisnis dari membuat kerangka kerja jaringan, bukan peladen jaringan.)

Sekarang peladen sedang berjalan, kunjungi http://127.0.0.1:8000/ dengan peramban jaringan anda. Anda akan melihat halaman "Congratulations!", dengan sebuah roket meluncur. Itu bekerja!

Merubah pangkalan

Secara awal, perintah `runserver` memulai peladen pengembangan di IP internal pada pangkalan 8000.

Jika anda ingin merubah pangkalan peladen, lewati sebagai penjelasan baris-perintah. Sebagai contoh, perintah ini menyalakan peladan pada pangkalan 8080:

/ 

    $ python manage.py runserver 8080

    ...\> py manage.py runserver 8080

Jika anda ingin merubah IP peladen, lewatkan bersama dengan pangkalan. Jadi untuk mendengar semua IP umum (berguna jika anda ingin sedang menjalankan Vagrant atau ingin menunjukkan pekerjaan anda pada komputer lain pada jaringan), gunakan:

/ 

    $ python manage.py runserver 0.0.0.0:8000

    ...\> py manage.py runserver 0.0.0.0:8000

Dokumentasi penuh untuk peladen pengembangan dapat ditemukan di acuan `runserver`.

Otomatis memuat kembali `runserver`

Peladen pengembangan otomatis memuat kembali kode Phyton untuk setiap permintaan sesuai kebutuhan. Anda tidak butuh memulai kembali peladen untuk perubahan kode agar berpengaruh. Bagaimanapun, beberapa tindakan seperti menambahkan berkas tidak akan memicu mulai kembali, sehingga anda harus memulai kembali peladen dalam kasus ini.

## Membuat aplikasi jejak pendapat

Sekarang bahwa lingkungan anda -- sebuah "proyek" -- sedang diatur, anda sudah untuk siap memulai pekerjaan.

Setiap aplikasi anda tulis dalam Django terdiri dari paket Phyton yang mengikuti ketentuan tertentu Django datang dengan kegunaan yang otomatis membangkitkan struktur direktori dasar dari sebuah aplikasi, sehingga anda dapat fokus pada menulis kode daripada membuat direktori.

Proyek lawan aplikasi

Apa perbedaan diantara proyek dan aplikasi? Aplikasi adalah aplikasi jaringan yang melakukan sesuatu -- yaitu, sitem blog, basisdata dari rekaman umum atau aplikasi poling kecil. Proyek adalah kumpulan dari konfigurasi dan aplikasi untuk situs jaringan tertentu. Proyek dapat mengandung banyak aplikasi. Sebuah aplikasi dapat berada dalam banyak proyek.

Aplikasi anda dapat tinggal dimanapun dalam Python path anda. Dalam petunjuk ini, kami akan membuat aplikasi jejak pendapat dalam direktori yang sama dengan berkas `manage.py` anda sehingga itu dapat diimpor sebagai modul tingkat-atas sendiri, daripada sub modul dari `mysite`.

Untuk membuat aplikasi anda, pastikan anda berada di direktori sama sebagai `manage.py` dan ketik perintah ini:

/ 

    $ python manage.py startapp polls

    ...\> py manage.py startapp polls

That'll create a directory `polls`, which is laid out like this:

    polls/
        __init__.py
        admin.py
        apps.py
        migrations/
            __init__.py
        models.py
        tests.py
        views.py

Struktur direktori ini akan merumahkan aplikasi jejak pendapat.

## Tulis tampilan pertama anda

Mari kita menulis tampilan pertama. Buka berkas `polls/views.py` dan taruh kode Phyton berikut didalamnya:

`polls/views.py`

    from django.http import HttpResponse

    def index(request):
        return HttpResponse("Hello, world. You're at the polls index.")

Ini adalah kemungkinan tampilan sederhana di Django. Untuk memanggil tampilan, kami butuh memetakannya ke URL - dan untuk ini kami butuh URLconf.

To create a URLconf in the polls directory, create a file called `urls.py`. Your app directory should now look like:

    polls/
        __init__.py
        admin.py
        apps.py
        migrations/
            __init__.py
        models.py
        tests.py
        urls.py
        views.py

Di berkas `polls/urls.py` sertakan kode berikut:

`polls/urls.py`

    from django.urls import path

    from . import views

    urlpatterns = [
        path("", views.index, name="index"),
    ]

Langkah selanjutnya adalah menunjuk akar URLconf pada modul `polls.urls`. Dalam `mysite/urls.py`, tambah sebuah impor untuk `django.urls.include` dan masukkan sebuah `include()` dalam daftar `urlpatterns`, sehingga anda memiliki:

`mysite/urls.py`

    from django.contrib import admin
    from django.urls import include, path

    urlpatterns = [
        path("polls/", include("polls.urls")),
        path("admin/", admin.site.urls),
    ]

Fungsi `include()` mengizinkan mengacu URLconf lain. Kapanpun Django menghadapi `include()`, Itu memotong bagian apapun dar URL cocok ke titik itu dan mengirim string sisa ke URLconf disertakan untuk pengolahan lebih lanjut.

Ide dibelakan `include()` adalah membuat itu mudah pasang-dan-mainkan URL. Sejak jejak pendapat dalam URLconf mereka sendiri (`polls/urls.py`), mereka dapat dipasang dibawah "/polls/", atau dibawah "/fun_polls/", atau dibawah "/content/polls/", atau jalur akar lain apapun, dan aplikasi masih bisa bekerja.

Kapan menggunakan `include()`

Anda harus selalu menggunakan `include()` ketika anda menyertakan pola URL lain. `admin.site.urls` hanya pengecualian untuk ini.

Anda sekarang harus mengikat tampilan `index` kedalam URLconf. Periksa pekerjaannya dengan perintah berikut:

/ 

    $ python manage.py runserver

    ...\> py manage.py runserver

Pergi ke http://localhost:8000/polls/ di perambah anda, dan anda seharusnya melihat teks "Halo, dunia. Anda sedang berada di index jejak pendapat.", yang anda tentukan di tampilan `index`.

Laman tidak ditemukan?

JIka anda mendapat sebuah kesalahan halaman disini, periksa bahwa anda akan ke http://localhost:8000/polls/ dan bukan http://localhost:8000/.

Fungsi `path()` melewatkan empat argumen, dua dibutuhkan: `route` dan `view`, dua pilihan: `kwargs`, dan `name`. Pada titik ini, itu berharga meninjau kembali untuk apa argumen-argumen ini.

### `path()` argument: `route`

`route` adalah sebuah string yang mengandung sebuah pola URL. Ketika mengolah sebuah permintaan, Django mulai pada pola pertama dalam `urlpatterns` dan membuat itu turun ke daftar, membandingkan URL diminta terhadap setiap pola sampai itu menemukan satu yang cocok.

Pola-pola tidak mencari parameter GET dan POST, atau nama ranah. Sebagai contoh, dalam sebuah permintaan pada `https://www.example.com/myapp/`, URLconf akan mencari untuk `myapp/`. Dalam sebuah permintaan pada `https://www.example.com/myapp/?page=3`, URLconf akan juga mencari untuk `myapp/`.

### argumen `path: ``view`()`

Ketika Django menemukan sebuah pola cocok, itu memanggil fungsi tampilan khusus dengan sebuah obyek `HttpRequest` seperti argumen pertama dan nilai-nilai apapun "ditangkap" dari rute sebagai argumen katakunci. Kami akan memberikan sebuah contoh dari ini dalam sebuah bit.

### argumen `path: ``kwargs`()`

Argumen kata kunci yang berubah-ubah dapat dilewatkan di kamus ke tampilan sasaran. Kami tidak akan menggunakan fitur Django ini di tutorial ini.

### argumen `path()`: `name`

Menamai URL anda membiarkan anda menunjuk ke kejelasannya dari di tempat lain di Django, khususnya dari dalam cetakan. Fitur kuat ini mengizinkan anda membuat perubahan global pada corak URL dari proyek anda selagi hanya menyentuh berkas tunggal.

Ketika anda nyaman dengan permintaan dasar dan aliran tanggapan, baca bagian 2 dari tutorial ini utuk memulai bekerja dengan basisdata.