Menulis Project Djanggo App Tahap 1
Sekarang kita akan belajar menggunakan contoh :
Dengan menggunakan tutorial ini, kita akan membahas bagaimana cara membuat Poll Application (aplikasi untuk polling, pemungutan suara).
Aplikasi ini akan terdiri atas dua bagian :
- Public Site yang dapat dilihat banyak orang sehingga dapat melakukan vote.
- Admin Site yang mengizinkan anda untuk melakukan menambah, mengubah dan mengurangi data.
Kita sudah menginstall Django di tutorial sebelumnya. Anda dapat memanggil Django yang sudah terinstall dengan mengaktifkan interpreter dan menuliskannya pada console import django . Apabila perintah berjalan sukses dan tidak error maka itu berarti django sudah terinstall.
Membuat Project
Apabila ini adalah awal dan pertama kalinya anda menggunakan django, anda akan lebih berhati-hati dalam mensetting setup. Mengumpulkan dan menata ulang setting baik berupa konfigurasi database, spesific option, dan application setting.
Dari command line gunakan cd masuklah ke directory yang akan kita buat menjadi tempat dikumpulkannya code.
django-admin.py startproject mysite
Hal ini akan membuat direktory mysite pada komputer anda.
django-admin.py harus dipastikan selalu ada pada system anda. apabila anda tidak menemukannya maka coba dicari pada site-packages/django/bin, dimana site-packages ada pada direktori dimana python anda install. Apabila anda menggunakan symlinking untuk django-admin.py maka tempatnya berada pada /usr/local/bin.
Dimanakah code python berada ?
bagi anda yang sering menggunakan PHP code program diletakkan di var/www . Hal ini berbeda dengan python yang diletakkan di /home/code_programnya .
Ini jauh lebih Aman.
mysite/
manage.py
mysite/
__init__.py
settings.py
urls.py
wsgi.py
* bila anda menggunakan versi django terbaru strukturnya berbeda tidak apa-apa.
Berikut ini keterangan dari file-file tersebut :
These files are:
- Yang paling luar mysite/ directory adalah direktori untuk menampung file project kita. Direktori ini dapat kita rename sesuai keinginan kita.
- manage.py: Sebuah program untuk berinteraksi dengan django project kita. Kita dapat memperoleh informasi lebih lanjut tentang file manage.py pada django-admin.py and manage.py.
- Di dalam mysite/ directory adalah file-file python project kita. Nama paket tersebut akan dipake untuk memanggil project (contoh import mysite.settings).
- mysite/__init__.py: Sebuah file yang kosong yang digunakan oleh Python agar dikenali sebagai Paket Python.
- mysite/settings.py: Settings/configuration untuk Django project. Django settings digunakan untuk mensetting program project kita.
- mysite/urls.py: Sebuah file dimana digunakan untuk membuat dan mensetting tampilan URL. untuk informasi lebih lanjut tentang file ini anda dapat melihat di URL dispatcher.
- mysite/wsgi.py: Sebuah entry point WSGI-compatible webservers untuk melayani project kita.
Server Development
Langkah selanjutnya adalah kita masuk ke direktori Mysite kemudian untuk menjalankan webserver django kita ketikkan :
python manage.py runserver
Terlihat hasilnya adalah sebagai berikut.
![]() |
Sukses Menjalankan Django Python Server |
Sampai disinilah kita sudah berhasil menjalankan Django Development Server. Django Development Server ini murni menggunakan sintaks python jadi tidak menggunakan Apache Server. Server ini sudah terinstall dalam paket Django, jadi kita tidak perlu mensetting server segala, cukup memikirkan kode-kodenya dan Server siap di lauching. Asik bukan....
Perhatian : Jangan gunakan dibangun ulang server python yang sudah terpaket di django ini, karena kita focus di development codenya bukan pengembangan web servernya.
Database Setup
Sekarang, edit mysite/settings.py. Ini adalah modul standard python untuk menseting variabel pada Django settings. Gantilah DATABASES 'default' untuk melakukan koneksi ke database.
- ENGINE -- Yang disupport django 'django.db.backends.postgresql_psycopg2', 'django.db.backends.mysql', 'django.db.backends.sqlite3' atau 'django.db.backends.oracle'. Atau database yang lain juga tersedia klik disini untuk info lebih lanjut.
- NAME -- Nama dari database anda. Apabila anda menggunakan SQLite, database akan menjadi sebuah file pada komputer anda; pada kasus ini, NAME harus disertakan secara jelas dimana path file diletakkan, masukkan juga nama file. Apabila file tidak ada, maka file akan secara otomatis dibuat saat kita melakukan synchronize database saat pertama kali (lihat dibawah ini).Ketika menspesifikkan path-nya, selalu gunakan forward slashes, pada Windows (contoh C:/homes/user/mysite/sqlite3.db).
- USER -- Nama Username database (tidak digunakan pada SQLite).
- PASSWORD -- Password database (tidak digunakan pada SQLite).
- HOST -- Database host anda selalu ON. Biarkan isian ini kosong pada database server anda (tidak digunakan pada SQLite).
Apabila anda pemula dan tidak tahu database, kami merekomendasikan menggunakan SQLite dengan mensetting
ENGINE menjadi 'django.db.backends.sqlite3' dan NAME untuk menempatkan dimana kita ingin menempatkan databasenya. SQLite di-includekan Python 2.5 dan lebih baru, jadi anda tidak membutuhkan menginstall apapun untuk menginstall SQLite. Saat anda menginstall python disaat yang sama anda sudah menginstall SQLite.
Contoh
Apabila menggunakan PostgreSQL atau MySQL, yakinkan kita membuat database terlebih dahulu. Lakukan itu semua dengan "CREATE DATABASE database_name;" menggunakan interakif database prompt.
Apabila menggunakan SQLite, anda tidak perlu membutuhkan setting ini -
database file akan secara otomatis dikerjakan program.
Ketika anda mensetting settings.py, set TIME_ZONE menggunakan Time Zone kita. Default time adalah waktu di (Chicago).
Juga perlu dicatat bahwa INSTALLED_APPS setting terdapat pada file bagian bawah. Semua aplikasi pada Django diaktifkan. Apps dapat digunakan pada multi projects, dan kita dapat mem-package dan mendistribusikan mereka ke berbagai project.
Secara default default, INSTALLED_APPS menyertakan beberapa apps, semua datang bersama Django:
- django.contrib.auth -- authentication system.
- django.contrib.contenttypes -- framework untuk tipe content.
- django.contrib.sessions -- session framework.
- django.contrib.sites -- framework untuk me-manage multi site dengan satu Django yang sudah terinstall.
- django.contrib.messages -- memanage message framework.
- django.contrib.staticfiles -- framework untuk memanage static files.
Semua aplikasi ini disertakan secara default agar nyaman dalam banyak kasus secara umum.
Setiap applications dibuat minimal menggunakan satu database table, yang digunakan,
jadi kami membutuhkan untuk membuat table pada database sebelum kita menggunakannya. Untuk melakukan itu gunakan perinta dibawah ini :
python manage.py syncdb
Perintah syncdb command dapat dilihat pada INSTALLED_APPS setting secara otomatis database tables terbuat sesuai dengan
file settings.py . Anda akan melihat pesan saat pembuatan tabel terbuat. dan anda akan mendapati sebuat prompt yang bertanya apakah anda ingin menggunakan superuser sebagai authentication system. Tinggal ditekan next saja berikutnya.
Apabila anda tertarik, jalankan command-line client untuk database anda dan ketikkan
\dt (PostgreSQL), SHOW TABLES; (MySQL), atau .schema (SQLite) untuk menampilkan tables Django yang sudah terbuat.
Untuk fungsi minimal
Seperti yang sudah kita bicarakan, aplikasi secara default sudah di-includ untuk kasus umum, tetapi tidak semua orang membutuhkan itu. Apabila anda tidak membutuhkannya, hapus saja sintaks
INSTALLED_APPS sebelum menjalankan syncdb. syncdb command hanya akan membuat tables untuk apps di
INSTALLED_APPS.
Membuat Model
Sekarang environment anda "project" -- sudah ter-set up, anda sudah men-setup saat mengerjakannya.
Setiap application yang anda tulis di Django terdiri dari Python package, dimana Python path anda, yang selalu mengikuti konfensi tertentu. Django datang dengan sebuah
utility yang secara otomatis menggenerate basic directory structure dari app, jadi anak dapat memfocuskan diri anda untuk menulis code dari pada membuat direktori-direktori yang dibutuhkan.
Projects vs. apps
Apa perbedaan antara sebuah project dan app? App adalah Web
application yang melakukan sesuatu -- seperti Weblog system, sebuah database untuk
public records atau sebuah pooling sederhana poll app. Sedang sebuah project adalah konfigurasi dan apps untuk situs tertentu. sebuah project dapat terdiri dari
multiple apps. An app can be in multiple projects.
Apps anda dapat disimpan dimana saja di Python path. Pada tutorial ini, kita akan membuat poll app dengan menggunakan file manage.py sehingga dapat dibuktikan bahwa itu merupakan top-level module, bukan submodul dari mysite.
Untuk membuat app pertama kita, yakinkan dulu bahwa kita sudah berada di direktori manage.py dan ketikkan perintah dibawah ini :
python manage.py startapp polls
maka akan tercipta file berikut ini :
polls/
__init__.py
models.py
tests.py
views.py
directory structure ini akan tercipta poll application.
Langkah pertama dalam menuliskan sebuah database Web app pada Django adalah untuk mendefinisikan model anda
-- dasarnya, database layout anda, dengan tambahan metadata.
Philosophy
Sebuah model adalah single, definitive source dari data tentang data anda. Ini berisi field dasar dan behavior data yang akan di storekan. Django mengikuti DRY Principle. Tujuan dari mendefinisikan model data pada satu tempat dan secara otomatis didefinisikan dari tempat itu.
concept ini dipresentasikan dengan Python classes. Editlah file polls/models.py sehingga menjadi sebagai berikut :
from django.db import models class Poll(models.Model): question = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') class Choice(models.Model): poll = models.ForeignKey(Poll) choice = models.CharField(max_length=200) votes = models.IntegerField()
Kode ini langsung. model direpresentasikan pada sebuah class dimana subclasses dari django.db.models.Model. Tiap model memiliki class variables number, yang mana tiap bagian me-representasikan sebuah database field pada model.
Tiap field diwakili oleh sebuah Field class -- contoh, CharField untuk character fields dan DateTimeField untuk waktu. Hal ini memberi tahu Django apa tipe data yang akan ada pada field.
Nama dari tiap-tiap Field instance (contohnya. question atau pub_date ) ini adalah nama dari field name( machine-friendly format ). Anda akan menggunakan nilai dari variabel ini pada Python code anda, dan database anda akan menggunakannya sebagai nama column.
Anda dapat menggunakan pilihan pertama posisi argumen Field agar dapat dibaca oleh manusia. Hal ini digunakan pada sepasang introspective parts dari Django, didokumentasikan secara ganda. Apabila field ini tidak tersedia, Django akan menggunakan machine-readable name. Pada contoh ini, kita memiliki hanya didefinisikan oleh human-readable name untuk Poll.pub_date. Untuk semua field pada model, field's machine-dibaca oleh manusia hanya namanya saja.
Beberapa Field classes memiliki unsur-unsur yang dibutuhkan. CharField, contohnya, mengharuskan anda menggunakan max_length. Hal ini tidak hanya digunakan pada database schema, tetapi pada validation, seperti yang sudah kita lihat dan saksikan.
Yang terakhir, catat sebuah relasi yang didefinisikan oleh ForeignKey. Hal ini memerintahkan Django yang Choice yang direlasikan dengan single Poll. Django mensupport semua database relationships: many-to-ones, many-to-manys dan one-to-ones.
Mengaktifkan MODEL
Dengan code yang sederhana ini model code akan memberikan Django banyak informasi. Dengan itu Django dapat :
- Membuat sebuah database schema (CREATE TABLE statements) untuk app.
- Membuat Python database-access API untuk mengakses Poll dan Choice objects.
Tetapi yang pertama kita membutuhkan untuk memanggil project polls app yang sudah terinstall.
Philosophy
Django apps adalah "pluggable": Anda dapat menggunakan app ini pada multiple projects, dan anda akan mendistribusikan apps, karena mereka tidak terikat pada installasi django yang diberikan.
Edit settings.py file lagi, dan rubah
INSTALLED_APPS setting untuk menambahkan string 'polls'. sehingga dapat terlihat sebagai berikut :
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', # Uncomment the next line to enable the admin: # 'django.contrib.admin', # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', 'polls', )
Sekarang Django tahu hal apa yang diincludekan dalam polls app. sekarang jalankan
command:
python manage.py sql polls
Anda akan melihat statement berikut ( CREATE TABLE SQL
statements untuk membuat polls app):
BEGIN;
CREATE TABLE "polls_poll" (
"id" serial NOT NULL PRIMARY KEY,
"question" varchar(200) NOT NULL,
"pub_date" timestamp with time zone NOT NULL
);
CREATE TABLE "polls_choice" (
"id" serial NOT NULL PRIMARY KEY,
"poll_id" integer NOT NULL REFERENCES "polls_poll" ("id") DEFERRABLE INITIALLY DEFERRED,
"choice" varchar(200) NOT NULL,
"votes" integer NOT NULL
);
COMMIT;
![]() |
meski polls menjadi pools karena salah ketik. |
Catat hal berikut ini :
- output yang tepat akan sangat bergantung pada database yang anda gunakan.
- Table names secara otomatis di buat dengan mengkombinasikan nama app (polls) dan lowercase dari model -- poll dan choice.
- Primary keys (IDs) akan ditambahkan secara automatically.
- Dengan konvensi, Django menambahkan "_id" untuk menjadi foreign key field name.
- foreign key relationship dibuat secara explicit dengan REFERENCES statement.
- Dijahitkan pada database yang anda gunakan, jadi database-specific field types seperti auto_increment (MySQL), serial (PostgreSQL), atau integer primary key (SQLite) akan dibuat secara automatically. Sama berlakunya dengan mengutip field name -- menggunakan double quotes atau single quotes. Pencipta dari tutorial menjalankan PostgreSQL, jadi saat digenerate maka yang diciptakan adalah PostgreSQL syntax.
- sql command tidak sebenarnya di run pada database SQL pada database anda - itu hanya tertulis pada layar sehingga anda dapat melihat Statement SQL Django yang dibutuhkan. Apabila anda menginginkan, anda dapat meng-copy dan paste SQL ini pada database prompt anda. Bagaimanapun juga kita dapat melihat secara sepintas, Django menyediakan jalan termudah untuk melakukan installasi SQL ke database.
Apabila anda masih teratarik maka jalankan perintah-perintah dibawah ini :
- python manage.py validate -- Checks apabila terlihat error konstuksi moel anda.
- python manage.py sqlcustom polls -- Outputs custom SQL statements (seperti table yang dimodifiksi) yang sudah didefinisikan pada application.
- python manage.py sqlclear polls -- Outputs yang diperlukan DROP TABLE statements untuk app ini, sesuai dengan tabel yang sudah ada pada database anda.
- python manage.py sqlindexes polls -- Outputs CREATE INDEX statements untuk app.
- python manage.py sqlall polls -- kombinasi dari SQL dari sql, sqlcustom, dan sqlindexes commands.
Lihat output yang terlihat pada perintah tadi dapat membuat anda mengerti bagaimana dan apa yang terjad.
Sekarang jalankan syncdb lagi untuk membuat seluruh model tables pada database anda :
python manage.py syncdb
syncdb command menjalankan SQL dari sqlall pada database anda dari apps INSTALLED_APPS yang belum ada pada database anda. Hal ini membuat tables, initial data dan indexes untuk banyak
apps anda tinggal menambahkan pada project anda sejak anda menjalankan syncdb.
syncdb dapat dipanggil kapan saja sesuai yang anda minta, dan akan membuat tabel yang belum terbuat.
Baca django-admin.py documentation untuk informasi yang lengkap mengenai manage.py utility yang dapat dilakukan.
Bermain dengan API
Sekarang, kita akan lompat ke interactive Python shell dan play dengan Free
API Django yang sudah diberikan kepada anda. Untuk memanggil Python shell, gunakan perintah ini command:
python manage.py shell
Kami menggunakan ini bukan hanya untuk mengetik "python", karena manage.py mengeset DJANGO_SETTINGS_MODULE environment variabel, yang mana memberikan Django python import path kepada file settings.py .
Bypassing manage.py
Apabila anda tidak menggunakan manage.py, no problem. anda hanya mengeset
DJANGO_SETTINGS_MODULE environment variable untuk mysite.settings dan menjalankan python dari direktori yang sama yang ada file manage.py didalamnya (atau yakinkan directory tersebut pada python path import mysite bekerja).
Sekarang gunakan shell API tersebut untuk mengeksplore Database API :
>>> from polls.models import Poll, Choice # Import the model classes we just wrote. # No polls are in the system yet. >>> Poll.objects.all() [] # Create a new Poll. # Support for time zones is enabled in the default settings file, so # Django expects a datetime with tzinfo for pub_date. Use timezone.now() # instead of datetime.datetime.now() and it will do the right thing. >>> from django.utils import timezone >>> p = Poll(question="What's new?", pub_date=timezone.now()) # Save the object into the database. You have to call save() explicitly. >>> p.save() # Now it has an ID. Note that this might say "1L" instead of "1", depending # on which database you're using. That's no biggie; it just means your # database backend prefers to return integers as Python long integer # objects. >>> p.id 1 # Access database columns via Python attributes. >>> p.question "What's new?" >>> p.pub_date datetime.datetime(2012, 2, 26, 13, 0, 0, 775217, tzinfo=<UTC>) # Change values by changing the attributes, then calling save(). >>> p.question = "What's up?" >>> p.save() # objects.all() displays all the polls in the database. >>> Poll.objects.all() [<Poll: Poll object>]
Tunggu sebentar. <Poll: Poll object> adalah bentuk representasi yang tidak terdukung. Let's fix dengan mengedit polls model ( file
polls/models.py ) dan tambahkan
__unicode__() method pada Poll dan
Choice:
class Poll(models.Model): # ... def __unicode__(self): return self.question class Choice(models.Model): # ... def __unicode__(self): return self.choice
Hal ini sanget penting untuk menambahkan __unicode__() methods pada model anda, tidak hanya untuk kenyamanan saat berurusan dengan interactive
prompt, tetapi selalu karena objects adalah representasi yang digunakan Django secara otomatis digenerate admin.
Mengapa __unicode__() mengapa tidak
__str__()?
Apabila anda sangat familiar dengan Python, anda akan memiliki kebiasaan coding
__str__() methods untuk classe, berbeda dengan
__unicode__() methods. Kita menggunakan
__unicode__() disini karena Django models berurusan dengan Unicode secara default. Semuga data pada database anda dikonfersi ke
Unicode bila sudah kembali.Django models secara default menggunakan default __str__() method yang memanggil __unicode__() dan mengkonversi menjadi UTF-8 bytestring. ini artinya bahwa unicode(p) akan mengembalikan Unicode string, dan str(p) akan kembali dengan normal string, dengan karakter ber-encode UTF-8.
tinggal ingat
__unicode__() methods untuk models anda. Dengan sebuah keberuntungan untuk semua yang anda kerjakan.
Catatlah berikut ini adalah sintaks normal Python methods. Sekarang kita melakukan custom method, hanya demonstrasi :
import datetime from django.utils import timezone # ... class Poll(models.Model): # ... def was_published_recently(self): return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
Kita tambahkan import datetime dan from django.utils import
timezone, untuk referensi datetime module dan Django's
time-zone-related utilities pada django.utils.timezone. Apabila anda sangat familiar menggunakan Python, anda dapat mempelajari time zone support docs.
Save dan jalankan Python Shell lagi :
python manage.py shell
>>> from polls.models import Poll, Choice # Make sure our __unicode__() addition worked. >>> Poll.objects.all() [<Poll: What's up?>] # Django provides a rich database lookup API that's entirely driven by # keyword arguments. >>> Poll.objects.filter(id=1) [<Poll: What's up?>] >>> Poll.objects.filter(question__startswith='What') [<Poll: What's up?>] # Get the poll whose year is 2012. >>> Poll.objects.get(pub_date__year=2012) <Poll: What's up?> >>> Poll.objects.get(id=2) Traceback (most recent call last): ... DoesNotExist: Poll matching query does not exist. # Lookup by a primary key is the most common case, so Django provides a # shortcut for primary-key exact lookups. # The following is identical to Poll.objects.get(id=1). >>> Poll.objects.get(pk=1) <Poll: What's up?> # Make sure our custom method worked. >>> p = Poll.objects.get(pk=1) >>> p.was_published_recently() True # Give the Poll a couple of Choices. The create call constructs a new # choice object, does the INSERT statement, adds the choice to the set # of available choices and returns the new Choice object. Django creates # a set to hold the "other side" of a ForeignKey relation # (e.g. a poll's choices) which can be accessed via the API. >>> p = Poll.objects.get(pk=1) # Display any choices from the related object set -- none so far. >>> p.choice_set.all() [] # Create three choices. >>> p.choice_set.create(choice='Not much', votes=0) <Choice: Not much> >>> p.choice_set.create(choice='The sky', votes=0) <Choice: The sky> >>> c = p.choice_set.create(choice='Just hacking again', votes=0) # Choice objects have API access to their related Poll objects. >>> c.poll <Poll: What's up?> # And vice versa: Poll objects get access to Choice objects. >>> p.choice_set.all() [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>] >>> p.choice_set.count() 3 # The API automatically follows relationships as far as you need. # Use double underscores to separate relationships. # This works as many levels deep as you want; there's no limit. # Find all Choices for any poll whose pub_date is in 2012. >>> Choice.objects.filter(poll__pub_date__year=2012) [<Choice: Not much>, <Choice: The sky>, <Choice: Just hacking again>] # Let's delete one of the choices. Use delete() for that. >>> c = p.choice_set.filter(choice__startswith='Just hacking') >>> c.delete()
Untuk informasi model relationship lihat Accessing related objects. Untuk lebih tahu cara menggunakan double underscores untuk membuat
field lookups via API, lihat Field lookups. untuk detail database API, lihat Database API reference.
0 comments:
Posting Komentar
PEDOMAN KOMENTAR
Ayo berpartisipasi membangun budaya berkomentar yang baik. Pantang bagi kita memberikan komentar bermuatan menghina atau spam.
Kolom komentar tersedia untuk diskusi, berbagi ide dan pengetahuan. Hargai pembaca lain dengan berbahasa yang baik dalam berekspresi. Setialah pada topik. Jangan menyerang atau menebar kebencian terhadap suku, agama, ras, atau golongan tertentu.
Bangun sharing ilmu dengan berkomentar disini :