Django

อ่านว่า แจงโก้ หรือ ดีแจงโก้ ก็ได้

แจงโก้นั้นเป็น Web Framework ที่พัฒนาขึ้นจากภาษาไพธ่อน สำหรับการพัฒนาเวบดังกล่าว จะเรียกว่าเวบนั้นๆว่า Project , ใน 1 Project จะมีหลายๆ Application ข้างใน

วิธีที่จะอธิบายดัวต่อไปนี้ สามารถ ดาวน์โหลดโค๊ดตัวอย่างได้จาก mikelibrary.tar.gz (username:klainfo | password:1234)

ติดตั้ง

ดาวน์โหลดตัว ติดตั้งได้ที่ Official Sites หรือ Mirror KU

แตกไฟล์ ด้วยคำสั่ง

$ tar -zxvf Django-1.1-rc-1.tar.gz
และติดตั้งด้วยคำสั่ง
$ sudo python setup.py install

เริ่มต้น

ในที่นี้ จะยกตัวอย่างใช้ชื่อ Project Name ว่า MikeLibrary

$ django-admin.py startproject MikeLibrary
ภายใน directory Blog จะประกอบด้วยไฟล์ต่างๆ ดังนี้

  • init.py —- เป็นแฟ้มสำหรับระบุว่าไดเร็กทอรีนี้มี module อยู่ (ตามมาตฐานของ Python)
  • manage.py —- เป็น script หลักที่เราใช้ในการจัดการโปรเจ็คนี้
  • settings.py —- ระบุข้อกำหนดต่าง ๆ เช่น ข้อมูลเกี่ยวกับการเข้าถึง database, path ไปยัง templates เป็นต้น
  • urls.py —- ระบุข้อมูลของการจับคู่ url ไปยัง view function

เปลี่ยน permissions ให้กับไฟล์ manage.py

$ chmod +x manage.py
 
<usage:>
$ ./manage.py <command>

แก้ settings.py เพื่อสร้าง PROJECT_DIR

settings.py

import os.path
PROJECT_DIR = os.path.dirname(__file__)
 
DATABASE_ENGINE = "sqlite3"
DATABASE_NAME = "lib.db"
 
TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(PROJECT_DIR,'templates'),     #  <------ Add this line  ##########
)
กำหนด Templates Directory ไว้สำหรับเก็บไฟล์จำพวก .htm|.html

สร้าง app ชื่อว่า publication

publication หมายถึง ผลงานตีพิมพ์ทางวิชาการ

$ ./manage.py startapp publication

เปิดใช้ app ดังกล่าวที่หน้า admin

settings.py

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',          # <------ add this two lines ###########
    'MikeLibrary.publication',       #
)
ตามด้วยคำสั่ง syncdb
$ ./manage.py syncdb

สร้างหน้า views ให้กับ app

publication/views.py

from django.shortcuts import render_to_response
 
def index(request):
    return render_to_response("publication/index.html")

urls.py

urlpatterns = patterns('',
    (r'^$', 'MikeLibrary.publication.views.index'),      #  <--- add this line #########
)

สร้างหน้า templates ให้กับ app

สร้างหน้า base

เราจะสร้างหน้า base.html ไว้ให้หน้าอื่นๆ สำหรับ app อื่นๆ inherit ไปใช้ได้

templates/base.html

<html>
<body>
<h1>Mike Digital Library 2009 by klainfo</h1>
 
<div id="main-content">
  {% block content %}
  {% endblock %}
</div>
 
<div id="footer">Mike Digital Library 2009 is under the granted of Mikelab.net</div>
</body>
</html>

สร้างหน้า index สำหรับ app

templates/publication/index.html

{% extends "base.html" %}
 
{% block content %}
<p>
  Welcome to Mike Digital Library.
</p>
{% endblock %}

ระบุ static file

เราจะระบุ path ที่ใช้เก็บแฟ้ม static ใน settings.py โดยการเพิ่มบรรทัด เช่น

STATIC_DOC_ROOT = '/full/path/to/media'
โดยที่ /ใส่ path ไปยัง/media คือ path ไปที่ไดเร็กทอรีที่เราเก็บแฟ้มเหล่านี้ไว้ (โดยปกติเราจะสร้างไดเร็กทอรีชื่อ media ไว้ใน project)

จากนั้นไปแก้แฟ้ม urls.py โดยก่อนอื่นเราต้อง import โมดูลสำหรับเรียกใช้ค่าที่เราตั้งไว้ในแฟ้ม settings.py โดยเพิ่มบรรทัด

from django.conf import settings
ไว้ตอนต้นโปรแกรม

แล้วก็ไปเพิ่มบรรทัดด้านล่างลงในส่วน urlpatterns เพื่อเรียกใช้ view สำหรับแจกจ่าย static file ที่ Django เตรียมไว้ให้

urls.py

(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
     {'document_root': settings.STATIC_DOC_ROOT}),
โดย site_media/ ด้านบนระบุ URL สำหรับอ้างถึงแฟ้ม static โดยเราอาจจะเปลี่ยนได้ แต่ต้องระวังไม่ให้ซ้ำกับ url ของ ADMIN_MEDIA_PREFIX ที่ระบุไว้ตอนแรกก่อนหน้า เวลาเราจะเรียกแฟ้มเหล่านี้เราก็เรียกด้วย http://localhost:8000/site_media/แฟ้ม เป็นต้น

สร้าง Models ให้กับ app

publication/models.py

# _*_ encoding: utf-8 _*_
from django.db import models
 
class Publication(models.Model):
    author = models.CharField(max_length=100,verbose_name='ชื่อผู้แต่ง')
    title = models.CharField(max_length=100,verbose_name='ชื่อบทความ')
    conference = models.CharField(max_length=100,verbose_name='Conference')
    year = models.CharField(max_length=100,verbose_name='ปีที่ตีพิมพ์')
 
    def __unicode__(self):
        return self.title

และสั่ง syncdb อีกครั้ง

$ ./manage.py syncdb

เปิดใช้งานหน้า​ Admin อัติโนมัติ

urls.py

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
 
# Uncomment the next line to enable the admin:
(r'^admin/', include(admin..urls)),

settings.py

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',          # <------ add this two lines ###########
    'MikeLibrary.publication',                    #
)

และสั่ง syncdb อีกครั้ง

$ ./manage.py syncdb

สร้างไฟล์ admin.py ไว้ใน app

publication/admin.py

from django.contrib import admin
from models import Publication
 
admin.site.register(Publication)

พัฒนาแอพลิเคชั่นขั้นสูง

(โปรดติดตาม)

 
django.txt · Last modified: 2010/02/02 01:25 (external edit) · [Old revisions]
Recent changes RSS feed Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki