django: ใช้กับ apache2 บนเดเบียน

 

ลองติดตั้ง django เพื่อใช้งานกับ apache2 บนเดเบียน

เที่ยวนี้ทำไปบันทึกไป จึงไม่มีกำหนดเสร็จครับ

งานของ admin เจ้าของเซิร์ฟเวอร์
เอา django มาก่อน
# aptitude install subversion
# svn co http://code.djangoproject.com/svn/django/trunk/

ติดตั้ง django สู่ระบบ
# cd trunk
# python setup.py install

ลบซอร์ส หากไม่ต้องการดูโค๊ดของ django
# cd ..
# rm -rf trunk

กันเหนียวให้ apache2 เปิดมอดูล env (ส่วนใหญ่จะเปิดมาอยู่แล้วมั้ง)
# a2enmod env

ติดตั้ง mod_python และเปิดให้ใช้งาน
# aptitude install libapache2-mod-python
# a2enmod mod_python

งานของเรา เจ้าของเว็บ
สมมุติว่า admin ติดตั้ง ให้ DocumentRoot ของ apache2 สำหรับโดเมน www.example.com อยู่ที่ไดเรกทอรี่ของเรา /home/user1/www
และเราจะให้หน้าของ django ไปอยู่ที่ http://www.example.com/dj

มาที่ไดเรกทอรี่ของเราก่อน
$ cd ~/www

เริ่มโปรเจคต์ใหม่ชื่อ dj
$ django-admin.py startproject dj

ไปที่ไดเรคทอรี่ dj และเตรียมการให้ apache2 โดยการสร้างไฟล์ .htaccess
$ cd dj
$ vi .htaccess

SetHandler python-program
PythonHandler django.core.handlers.modpython
SetEnv SERVER_ADMIN webmaster@example.com
SetEnv DJANGO_SETTINGS_MODULE dj.settings
PythonDebug On
PythonPath "['/home/user1'] + sys.path"
RewriteEngine On
RewriteBase /dj/

เสร็จแล้ว ดูที่หน้า www.example.com/dj ได้ดังนี้
ตัวอย่างติดตั้ง django กับ apache2 ครั้งที่ 1

เพิ่มเติม
สำหรับการทำงานให้เต็มรูปแบบ ต้องสร้างหน้า admin ด้วย
การที่จะทำให้หน้า admin ทำงานได้สมบูรณ์ ต้องสร้างลิงก์โยงจากทรัพยากรของซอร์สมาที่ไดเรกทอรี่รากของ apache2 ด้วย
สมมุติถ้าใช้ไพธอน 2.4 บนเดเบียน
$ cd ~/www
$ ln -sf /usr/lib/python2.4/site-packages/django/contrib/admin/media/ .

สร้างหน้า admin โดยการลบคอมเมนต์ในไฟล์ dj/urls.py
$ cd dj
$ vi urls.py

...
     (r'^admin/', include('django.contrib.admin.urls')),
...

แต่ถ้าหากเราจะให้เพจของ django อยู่ในหน้า www.example.com/dj เราต้องแก้ไฟล์ด้วย

...
     (r'^dj/admin/', include('django.contrib.admin.urls')),
...

แต่...ก่อนจะใช้งานหน้า admin ได้ เราต้องสร้างฐานข้อมูลก่อน สมมุติว่าจะใช้กับ postgresql
สร้างฐานข้อมูลไว้รองรับ ตั้งชื่อว่า djdb
$ createdb djdb

Password: >>> --- USER1_PASSWORD

ปรับตั้งไฟล์ settings.py ให้ django รับรู้ฐานข้อมูลและให้เรียกใช้มอดูล admin
$ vi settings.py

...
DATABASE_ENGINE = 'postgresql'
DATABASE_NAME = 'djdb'
DATABASE_USER = 'user1'
DATABASE_PASSWORD = 'USER1_PASSWORD'
...
TIME_ZONE = 'Asia/Bangkok'
...
LANGUAGE_CODE = 'th'
...
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.admin',
)

สั่งปรับปรุงฐานข้อมูล
$ python manage.py syncdb

Creating table auth_message
Creating table auth_group
Creating table auth_user
Creating table auth_permission
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table django_admin_log

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): >>>--- yes
Username (Leave blank to use 'user1'): >>>--- ENTER
E-mail address: >>>--- user1@example.com
Password: >>>--- USER1_PASSWORD
Password (again): >>>--- USER1_PASSWORD
Superuser created successfully.
Installing index for auth.Message model
Installing index for auth.Permission model
Installing index for admin.LogEntry model

เสร็จแล้ว ดูจาก URL:http://www.example.com/dj/admin จะได้ดังนี้
หน้าจอ admin

อ้างอิง