ลองมาดูวิธีการติดตั้ง Django ซึ่งเป็น Web Framework ยอดนิยมสำหรับการพัฒนาเว็บไซต์ด้วยภาษา python กัน
โดยจะติดตั้ง Django ใน virtual environment ที่สร้างไว้ ติดตั้งและหัดใช้ pip, venv ใน Python 3 บน Ubuntu 16.04
หมายเหตุ ในที่นี้ ขอไม่อธิบายรายละเอียดในแต่ละส่วนของ django เนื่องจากมีรายละเอียดค่อนข้างมาก สำหรับการเริ่มต้น (รวมทั้งผู้เขียนเองด้วย) ขอทำตามตัวอย่าง เพื่อให้เห็นภาพ เข้าใจการทำงานคร่าวๆ ก่อน แล้วค่อยไปศึกษารายละเอียดต่อไป
cd เข้าไปในไดเรคทอรี environments
dev@ubuntu-1604:~$ cd environments/
dev@ubuntu-1604:~/environments$ ls -l
total 4
drwxrwxr-x 6 dev dev 4096 Nov 27 14:01 env1
ใช้คำสั่ง source ไฟล์ activate เพื่อเข้าสู่ virtual environment
dev@ubuntu-1604:~/environments$ source env1/bin/activate (env1) dev@ubuntu-1604:~/environments$
สังเกตว่า prompt จะแสดงชื่อ virtual environment ที่ใช้อยู่
ใช้ pip install เพื่อติดตั้ง django
(env1) dev@ubuntu-1604:~/environments$ pip install django Collecting django Downloading Django-1.10.3-py2.py3-none-any.whl (6.8MB) 100% |████████████████████████████████| 6.8MB 235kB/s Installing collected packages: django Successfully installed django-1.10.3
รันคำสั่ง django-admin ระบุออปชัน –version
เวอร์ชันล่าสุดของ django ณ ตอนที่เขียนบทความนี้คือ 1.10.3
(env1) dev@ubuntu-1604:~/environments$ django-admin --version 1.10.3
ใช้คำสั่ง django-admin ระบุคำสั่งย่อย (subcommand) startproject เพื่อสร้างโปรเจคที่ชื่อ web1
(env1) dev@ub...:~/environments$ django-admin startproject web1
ตัวอย่างไดเรคทอรีและไฟล์ที่สร้างได้จาก startproject
(env1) dev@ubuntu-1604:~/environments$ ls -l
total 8
drwxrwxr-x 6 dev dev 4096 Nov 27 14:01 env1
drwxrwxr-x 3 dev dev 4096 Nov 27 18:52 web1
(env1) dev@ubuntu-1604:~/environments$ cd web1/
(env1) dev@ubuntu-1604:~/environments/web1$ ls -l
total 8
-rwxrwxr-x 1 dev dev 802 Nov 27 18:52 manage.py
drwxrwxr-x 2 dev dev 4096 Nov 27 18:52 web1
(env1) dev@ubuntu-1604:~/environments/web1$ ls -l web1/
total 12
-rw-rw-r-- 1 dev dev 0 Nov 27 18:52 __init__.py
-rw-rw-r-- 1 dev dev 3090 Nov 27 18:52 settings.py
-rw-rw-r-- 1 dev dev 761 Nov 27 18:52 urls.py
-rw-rw-r-- 1 dev dev 386 Nov 27 18:52 wsgi.py
ใช้คำสั่ง python รันไฟล์ manage.py ระบุคำสั่งย่อย (subcommand) migrate เพื่อสร้างฐานข้อมูลเบื้องต้น
(env1) dev@ub...:~/environments/web1$ python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying sessions.0001_initial... OK
โดยดีฟอลต์ django จะใช้ sqlite3 เป็นฐานข้อมูล
ตัวอย่างไฟล์ db.sqlite3 ที่ได้จากการรัน migrate
(env1) dev@ubuntu-1604:~/environments/web1$ ls -l
total 44
-rw-r--r-- 1 dev dev 36864 Nov 27 19:15 db.sqlite3
-rwxrwxr-x 1 dev dev 802 Nov 27 18:52 manage.py
drwxrwxr-x 3 dev dev 4096 Nov 27 19:14 web1
รันไฟล์ manage.py ระบุคำสั่งย่อย createsuperuser เพื่อสร้างผู้ใช้งานระดับ admin ของไซต์
(env1) dev@ub...:~/env...nts/web1$ python manage.py createsuperuser Username (leave blank to use 'dev'): dev Email address: dev@example.com Password: Password (again): Superuser created successfully.
รันไฟล์ manage.py ระบุคำสั่งย่อย runserver ตามด้วย 0.0.0.0:8000 ซึ่งเป็นการรันเป็นเว็บเซิร์ฟเวอร์โดยใช้พอร์ต 8000
(env1) dev@ub...:~/environments/web1$ python manage.py runserver 0.0.0.0:8000 Performing system checks... System check identified no issues (0 silenced). November 27, 2016 - 11:54:51 Django version 1.10.3, using settings 'web1.settings' Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C.
ทดลองใช้ browser เปิดเว็บไปที่ IP ของเซิร์ฟเวอร์ ซึ่งในที่นี้คือ 192.168.56.116 ตามด้วยหมายเลขพอร์ต 8000
ตัวอย่างการเข้า http://192.168.56.116:8000/admin
ขึ้นข้อความ DisallowedHost at / ซึ่งแปลว่า browser ไม่สามารถเปิดเว็บได้ ต้องแก้ไขคอนฟิกของ django
ตัวอย่างข้อความที่ขึ้นบนหน้าจอ manage.py runserver
Invalid HTTP_HOST header: '192.168.56.116:8000'. You may need to add '192.168.56.116' to ALLOWED_HOSTS.
[27/Nov/2016 11:55:26] "GET / HTTP/1.1" 400 60835
Invalid HTTP_HOST header: '192.168.56.116:8000'. You may need to add '192.168.56.116' to ALLOWED_HOSTS.
[27/Nov/2016 11:55:26] "GET /favicon.ico HTTP/1.1" 400 60893
กดปุ่ม [Ctrl]+[c] เพื่อออกจาก runserver
แก้ไขไฟล์ settings.py ซึ่งเป็นไฟล์คอนฟิกของ django
เพื่อความง่ายในที่นี้จะใช้เครื่องหมาย * ซึ่งหมายถึงอนุญาตให้รันบนทุก ip ของเซิร์ฟเวอร์
(env1) dev@ub....:~/environments/web1$ vi web1/settings.py
...
ALLOWED_HOSTS = ['*']
...
รัน manage.py runserver อีกครั้ง
(env1) dev@ub...:~/environments/web1$ python manage.py runserver 0.0.0.0:8000 Performing system checks... System check identified no issues (0 silenced). November 27, 2016 - 11:58:41 Django version 1.10.3, using settings 'web1.settings' Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C.
ลองเปิดเว็บใน browser อีกครั้ง จะเข้าได้ ขึ้นข้อความ It worked!
ตัวอย่างข้อความที่ขึ้นบนหน้าจอ manage.py runserver
[27/Nov/2016 12:01:30] "GET / HTTP/1.1" 200 1767
โดยดีฟอลต์ django จะมีพาธ admin ติดตั้งมาให้ด้วย วิธีการเข้าคือพิมพ์ /admin ต่อท้าย เช่น http://192.168.56.116:8000/admin
ตัวอย่างหน้าจอล็อกอินเพื่อเข้าสู่ Django administration ใส่ Username, Password ที่ใส่ตอนพิมพ์คำสั่ง createsuperuser
ตัวอย่างหน้าจอ Django administration
ลองใช้กันดูครับ