Django Framework
Django เป็นตัวที่คอยจัดการเว็บแบบ monolith นะครับ เหตุที่น่าสนใจเพราะว่าเนื่องจาก พวกตระกูล DataScience ทั้งหลายส่วนมากก็ใช้ภาษาไพธอนกันเป็นหลัก (โอเคว่าอาจจะมีภาษา R บ้าง ไรบ้าง แต่ยังไม่ได้ข่าวว่าภาษา R มันมี Web Back End ) ดังนั้นมันจะง่ายกว่าถ้าใช้ภาษาเดียวกันในการจัดการเรื่องพวกนี้ (ก็ไม่ต้องไปหัดหลายภาษาอะนะ อีกอย่างเพิ่งซื้อหนังสือเค้ามาอ่านด้วย 555) ว่าแล้วก็มาลองหัดติดตั้งกันดีกว่า
- pip install pipenv ติดตั้งตัวสร้างสภาพแวดล้อมจำลองของไพธอนก่อนนะครับ (เป็น virtualenv + pip)
- เนื่องจาก environment ที่ผมทำไว้ก่อนๆ หน้านี้เริ่มเยอะขึ้นเรื่อยๆ ดังนั้นผมจะสร้างโฟลเดอร์ py_env ไว้ที่ home ก่อน แล้วสร้างโฟลเดอร์ข้างในเป็นชื่อ django อีกทีนะครับ (ใช้คำสั่ง mkdir NameFolder นะครับ ของผมจะใช้ชื่อโฟลเดอร์ว่า valenteer ถ้าใช้ชื่ออื่นก็อย่าลืมแก้ด้วยนะครับ) จะได้พาธ /home/User/py_env/django/ valenteer (User คือชื่อผู้ใช้งานของเรานะครับ)
- ไปที่โฟลเดอร์ที่เราต้องการติดตั้ง django นะครับ (อย่างของผมไปข้างในโฟลเดอร์ชื่อ valenteer) แล้วใช้คำสั่ง pipenv shell ใช้ในโฟลเดอร์ที่เราติดตั้ง django ไว้นะครับ หลังจากนี้เราจะใช้คำสั่งใน pipenv shell กันนะครับ (ถ้าต้องการออกใช้ exit )
- pipenv install django (หรือแบบเจาะจงเวอร์ชั่น pipenv install django==x.x)
- ให้ใช้คำสั่ง django-admin startproject valenteer . นะครับ (ต้องมี " . ") ไม่งั้นมันจะสร้างโฟลเดอร์เพิ่ม
- เข้าไปข้างในโฟลเดอร์ valenteer แล้วใช้คำสั่ง python manage.py runserver ให้มันทำงาน กด ctrl + คลิ๊กที่ http://127.0.0.1:8000/ (หรือจะใส่ใน url ก็ได้) เมื่อต้องการให้มันหยุดทำงานกด ctrl + c นะครับ
- เมื่อรีสตาร์ทแล้วต้องการเปิดใช้งานอีกรอบ ให้เราไปที่โฟลเดอร์ /home/User/py_env/django/valenteer ใช้คำสั่ง pipenv shell แล้วใช้คำสั่ง python manage.py runserver นะครับ
- กรณีต้องการสร้างโปรเจ็คอื่นๆ อีกให้ไปเริ่มที่ข้อ 2 นะครับ
- ทีนี้เรามาเพิ่มไฟล์ที่เราต้องใช้ แต่มันไม่มีมาให้นะครับ อันแรกคือ views.py ให้สร้างไว้ที่เดียวกับ urls.py นะครับ พร้อมด้วยสร้างโฟลเดอร์ templates ข้างในโฟลเดอร์นี้เราต้องเอาไว้ใส่บางส่วนของหน้าเพจ ที่ใช้กันซ้ำๆ นะครับ
-
เข้าไปแก้ไขไฟล์ settings.py ตรงหัวข้อ TEMPLATES = [ .. นะครับ ให้แก้ตรง 'DIRS'
: [] เป็น (BASE_DIR, 'valenteer/templates'), นะครับ ซึ่งโครงสร้างโฟลเดอร์ของผมจะเป็นแบบในรูปนะครับ
(ถ้าใช้คำสั่ง tree ไม่ได้ให้ติดตั้งด้วยคำสั่ง sudo snap install tree
ก่อนนะครับ)
- ทีนี้มาทดลองสร้างหน้าเว็บแบบง่ายๆ กันนะครับ ก่อนอื่นเข้าไปแก้ไขไฟล์ urls.py นะครับ ด้านบนให้เพิ่ม from . import views คือเอาไฟล์ view.py เข้ามาใช้นะครับ แล้วไปที่ urlpatterns = [.. เพิ่ม path(' ', views.home, name='home '), เข้ามานะครับ ตรง home เดี๋ยวเราค่อยไปสร้างอีกทีในไฟล์
-
เข้าไปแก้ไขในไฟล์ views.py นะครับ ให้เพิ่มโค้ดเข้าไปแบบี้นะครับ
from django.http import HttpResponse
def home(request):
return HttpResponse('Hi this is your homepage')
- ซึ่งการแก้ไขนี้ต้อง ctrl + c ให้หยุดรันเซิฟเวอร์ก่อนนะครับ แล้ว python manage.py runserver ใหม่อีกทีถึงจะแสดงผลนะครับ
- ถ้าใครใช้ visual studio code ก็ลง extensions "python" ของ microsoft ได้นะครับ จะช่วยให้ไม่เมื่อยมือมาก 555
-
ทีนี้ลองไปสร้างหน้าเว็บในโฟลเดอร์ templates นะครับ ตั้งชื่อว่า about.html
ใส่โค้ดตามนี้ครับ
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>about</title>
</head>
<body>
<h3>Test about page</h3>
</body>
</html>
-
แล้วไปที่ views.py เพิ่มฟังก์ชั่นในการเรียก about ด้วยการอิมพอร์ต
from django.shortcuts import render
แล้วเพิ่มฟังก์ชั่น
def about(request):
return render(request, 'about.html')
-
ไปที่ไฟล์ urls.py ตรง urlpatterns = [.. เพิ่ม
path('about/', views.about, name='about'),
เข้าไปนะครับ - ทีนี้ปิดเซิฟเวอร์แล้วรันใหม่นะครับ ไปที่ http://127.0.0.1:8000/about นะครับ
- ต่อมาเราก็มาสร้างโฟลเดอร์ static สำหรับเก็บทั้งรูปภาพ วีดีโอ เพลง js และ css กัน ให้ไปที่โฟลเดอร์ที่มีไฟล์ manage.py อยู่นะครับ (เหนือขึ้นไปจาก urls.py หนึ่งโฟลเดอร์) แล้วให้สร้างโฟลเดอร์ชื่อว่า " static " ไว้นะครับ
-
ทีนี้ไปแก้ไขที่ไฟล์ settings.py นะครับ ให้หา
STATIC_URL = '/static/'
(ถ้าไม่มีก็เพิ่มเข้าไป) แล้วข้างล่างให้ใส่
STATICFILES_DIRS =[
BASE_DIR / "static",
]
- ไปหาตัวอย่างมาลองกันนะครับ (http://phaser.io/tutorials/making-your-first-phaser-3-game/phaser3-tutorial-src.zip) ซึ่งผมเอามาจากเว็บนี้ เราจะมาลองเรียกใช้รูปภาพ และ js ของเค้าภายใน django กันนะครับ ก่อนอื่นเราไปในโฟลเดอร์ templates แล้วสร้างโฟลเดอร์ชื่อ phaser ไว้ก่อนนะครับ แล้วเอาไฟล์ของเค้าที่โหลดมาไป extract ไว้ในโฟลเดอร์ ซึ่งมันจะได้หน้าเว็บ + assets มานะครับ
- ย้าย assets ไปไว้ในโฟลเดอร์ static แล้วตั้งชื่อใหม่ว่า " phaser3 " กันไปปนกับ asset ของเว็บอื่นนะครับ
- ในโฟลเดอร์เดียวกัน (static) สร้างโฟลเดอร์ชื่อ js ไว้เก็บไฟล์ของ phaser ด้วยนะครับ (ตัวไฟล์มีลิ้งค์ออนไลน์มาให้ แต่เราจะเทส django อีกอย่างออฟไลน์ได้ก็สะดวกนะ) แล้วโหลดตัวไฟล์มาใส่ไว้นะครับ แล้วแต่จะเลือก phaser.js หรือ phaser.min.js ก็ได้นะครับ
-
กลับไปที่โฟลเดอร์ templates นะครับ แล้วแก้ไขไฟล์ part10.html
(เอาตัวสุดท้ายมาเทสกันเลย 555) โดยบนสุดให้เพิ่ม
{% load static %}
ไว้นะครับ ภายใต้ <head> เพิ่ม
<script src="../../../static/js/phaser.js" type="text/javascript"></script>
(จะเป็น phaser.js หรือ phaser.min.js ขึ้นกับเราโหลดตัวไหนมานะครับ) ในส่วน function preload () ให้แก้ path จากเดิม 'assets/sky.png' เป็น
'{% static "/phaser3/sky.png" %}'
นะครับ ในรูปอื่นๆ ก็เช่นกัน -
ไปเพิ่ม path ในไฟล์ urls.py ด้วย
path('phaser10/', views.phaser10, name='phaser10'),
นะครับ -
แล้วก็เพิ่มฟังก์ชั่นในไฟล์ views.py ด้วย
def phaser10(request):
return render(request, 'phaser/part10.html')
- ลองปิด-เปิดเซิฟเวอร์ แล้วเรียกหน้าเว็บ http://127.0.0.1:8000/phaser10 ดูนะครับ เราจะได้เล่นเกมตัวอย่างของเค้าแล้วครับ
เค้าบอกว่ามันทำงานแบบ MTV คล้ายๆ MVC
(ถ้าคนเคยใช้ก็คงจะคุ้นเคยกันดี แต่ผมไม่เคยใช้นะ 55) คร่าวๆ
ละกันครับ ก่อนอื่นคือ user เรียกเว็บของเรามา ก็จะถูกส่งมาที่ไฟล์ urls.py
ซึ่งมันก็จะดูว่าลิ้งค์ที่เรียกมามีรึเปล่า ถ้ามีก็ส่งไปที่ views.py
ซึ่งที่ไฟล์นี้ก็จะดูว่าต้องใช้อะไรบางในการส่งกลับไปยัง user (เช่น models.py, templates
>> extends,include >> Somepage.html, static >> pic, movie,
music, css, js หรือไม่ใช้อะไรเลย ก็ตอบกลับจาก views เลย)
ความคิดเห็น
แสดงความคิดเห็น