ติดตั้ง Django บน Python 3

ลองมาดูวิธีการติดตั้ง 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

01-disallowedhost

ขึ้นข้อความ 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!

02-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

03-django-administration-login

ตัวอย่างหน้าจอ Django administration

04-django-site-administration

ลองใช้กันดูครับ

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.