Django Framework


             Django เป็นตัวที่คอยจัดการเว็บแบบ monolith นะครับ เหตุที่น่าสนใจเพราะว่าเนื่องจาก พวกตระกูล DataScience ทั้งหลายส่วนมากก็ใช้ภาษาไพธอนกันเป็นหลัก (โอเคว่าอาจจะมีภาษา R บ้าง ไรบ้าง แต่ยังไม่ได้ข่าวว่าภาษา R มันมี Web Back End ) ดังนั้นมันจะง่ายกว่าถ้าใช้ภาษาเดียวกันในการจัดการเรื่องพวกนี้ (ก็ไม่ต้องไปหัดหลายภาษาอะนะ อีกอย่างเพิ่งซื้อหนังสือเค้ามาอ่านด้วย 555) ว่าแล้วก็มาลองหัดติดตั้งกันดีกว่า

  1. pip install pipenv ติดตั้งตัวสร้างสภาพแวดล้อมจำลองของไพธอนก่อนนะครับ (เป็น virtualenv + pip) 
  2. เนื่องจาก environment ที่ผมทำไว้ก่อนๆ หน้านี้เริ่มเยอะขึ้นเรื่อยๆ ดังนั้นผมจะสร้างโฟลเดอร์ py_env ไว้ที่ home ก่อน แล้วสร้างโฟลเดอร์ข้างในเป็นชื่อ django อีกทีนะครับ (ใช้คำสั่ง mkdir NameFolder นะครับ ของผมจะใช้ชื่อโฟลเดอร์ว่า valenteer ถ้าใช้ชื่ออื่นก็อย่าลืมแก้ด้วยนะครับ) จะได้พาธ /home/User/py_env/django/ valenteer (User คือชื่อผู้ใช้งานของเรานะครับ)
  3. ไปที่โฟลเดอร์ที่เราต้องการติดตั้ง django นะครับ (อย่างของผมไปข้างในโฟลเดอร์ชื่อ valenteer) แล้วใช้คำสั่ง pipenv shell ใช้ในโฟลเดอร์ที่เราติดตั้ง django ไว้นะครับ หลังจากนี้เราจะใช้คำสั่งใน pipenv shell กันนะครับ (ถ้าต้องการออกใช้ exit )
  4.  pipenv install django (หรือแบบเจาะจงเวอร์ชั่น pipenv install django==x.x)
  5. ให้ใช้คำสั่ง django-admin startproject valenteer . นะครับ (ต้องมี " . ") ไม่งั้นมันจะสร้างโฟลเดอร์เพิ่ม
  6. เข้าไปข้างในโฟลเดอร์ valenteer แล้วใช้คำสั่ง python manage.py runserver ให้มันทำงาน กด ctrl + คลิ๊กที่ http://127.0.0.1:8000/  (หรือจะใส่ใน url ก็ได้) เมื่อต้องการให้มันหยุดทำงานกด ctrl + c นะครับ
  7. เมื่อรีสตาร์ทแล้วต้องการเปิดใช้งานอีกรอบ ให้เราไปที่โฟลเดอร์  /home/User/py_env/django/valenteer ใช้คำสั่ง  pipenv shell  แล้วใช้คำสั่ง python manage.py runserver นะครับ
  8. กรณีต้องการสร้างโปรเจ็คอื่นๆ อีกให้ไปเริ่มที่ข้อ 2 นะครับ
  9. ทีนี้เรามาเพิ่มไฟล์ที่เราต้องใช้ แต่มันไม่มีมาให้นะครับ อันแรกคือ views.py ให้สร้างไว้ที่เดียวกับ urls.py นะครับ พร้อมด้วยสร้างโฟลเดอร์ templates ข้างในโฟลเดอร์นี้เราต้องเอาไว้ใส่บางส่วนของหน้าเพจ ที่ใช้กันซ้ำๆ นะครับ
  10. เข้าไปแก้ไขไฟล์ settings.py ตรงหัวข้อ TEMPLATES = [ .. นะครับ ให้แก้ตรง 'DIRS' : [] เป็น (BASE_DIR, 'valenteer/templates'), นะครับ ซึ่งโครงสร้างโฟลเดอร์ของผมจะเป็นแบบในรูปนะครับ (ถ้าใช้คำสั่ง tree ไม่ได้ให้ติดตั้งด้วยคำสั่ง sudo snap install tree ก่อนนะครับ)


  11. ทีนี้มาทดลองสร้างหน้าเว็บแบบง่ายๆ กันนะครับ ก่อนอื่นเข้าไปแก้ไขไฟล์ urls.py นะครับ ด้านบนให้เพิ่ม from . import views คือเอาไฟล์ view.py เข้ามาใช้นะครับ แล้วไปที่ urlpatterns = [.. เพิ่ม path(' ', views.home, name='home '), เข้ามานะครับ ตรง home เดี๋ยวเราค่อยไปสร้างอีกทีในไฟล์
  12. เข้าไปแก้ไขในไฟล์ views.py นะครับ ให้เพิ่มโค้ดเข้าไปแบบี้นะครับ 

    from django.http import HttpResponse

    def home(request):
        return HttpResponse('Hi this is your homepage')


  13. ซึ่งการแก้ไขนี้ต้อง ctrl + c ให้หยุดรันเซิฟเวอร์ก่อนนะครับ แล้ว python manage.py runserver ใหม่อีกทีถึงจะแสดงผลนะครับ
  14. ถ้าใครใช้ visual studio code ก็ลง extensions "python" ของ microsoft ได้นะครับ จะช่วยให้ไม่เมื่อยมือมาก 555
  15. ทีนี้ลองไปสร้างหน้าเว็บในโฟลเดอร์ 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>


  16. แล้วไปที่ views.py เพิ่มฟังก์ชั่นในการเรียก about ด้วยการอิมพอร์ต
    from django.shortcuts import render
    แล้วเพิ่มฟังก์ชั่น
    def about(request):
       return render(request, 'about.html')


  17. ไปที่ไฟล์ urls.py ตรง urlpatterns = [.. เพิ่ม
       path('about/', views.about, name='about'),
    เข้าไปนะครับ 
  18. ทีนี้ปิดเซิฟเวอร์แล้วรันใหม่นะครับ ไปที่ http://127.0.0.1:8000/about นะครับ 
  19. ต่อมาเราก็มาสร้างโฟลเดอร์ static สำหรับเก็บทั้งรูปภาพ วีดีโอ เพลง js และ css กัน ให้ไปที่โฟลเดอร์ที่มีไฟล์ manage.py อยู่นะครับ (เหนือขึ้นไปจาก urls.py หนึ่งโฟลเดอร์) แล้วให้สร้างโฟลเดอร์ชื่อว่า " static " ไว้นะครับ
  20. ทีนี้ไปแก้ไขที่ไฟล์ settings.py นะครับ ให้หา STATIC_URL = '/static/' (ถ้าไม่มีก็เพิ่มเข้าไป) แล้วข้างล่างให้ใส่ 

    STATICFILES_DIRS =[
      BASE_DIR / "static",
    ]

  21. ไปหาตัวอย่างมาลองกันนะครับ (http://phaser.io/tutorials/making-your-first-phaser-3-game/phaser3-tutorial-src.zip) ซึ่งผมเอามาจากเว็บนี้ เราจะมาลองเรียกใช้รูปภาพ และ js ของเค้าภายใน django กันนะครับ ก่อนอื่นเราไปในโฟลเดอร์ templates แล้วสร้างโฟลเดอร์ชื่อ phaser ไว้ก่อนนะครับ แล้วเอาไฟล์ของเค้าที่โหลดมาไป extract ไว้ในโฟลเดอร์ ซึ่งมันจะได้หน้าเว็บ + assets มานะครับ
  22. ย้าย assets ไปไว้ในโฟลเดอร์ static แล้วตั้งชื่อใหม่ว่า " phaser3 " กันไปปนกับ asset ของเว็บอื่นนะครับ
  23. ในโฟลเดอร์เดียวกัน (static) สร้างโฟลเดอร์ชื่อ js ไว้เก็บไฟล์ของ phaser ด้วยนะครับ (ตัวไฟล์มีลิ้งค์ออนไลน์มาให้ แต่เราจะเทส django อีกอย่างออฟไลน์ได้ก็สะดวกนะ) แล้วโหลดตัวไฟล์มาใส่ไว้นะครับ แล้วแต่จะเลือก phaser.js หรือ phaser.min.js  ก็ได้นะครับ
  24. กลับไปที่โฟลเดอร์ 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" %}'

    นะครับ ในรูปอื่นๆ ก็เช่นกัน 
  25. ไปเพิ่ม path ในไฟล์ urls.py ด้วย

    path('phaser10/', views.phaser10, name='phaser10'),

    นะครับ 
  26. แล้วก็เพิ่มฟังก์ชั่นในไฟล์ views.py ด้วย

    def phaser10(request):
       return render(request, 'phaser/part10.html')


  27. ลองปิด-เปิดเซิฟเวอร์ แล้วเรียกหน้าเว็บ 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 เลย) 

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

โปรโมชั่นเน็ต TOT

โน๊ตบุ๊ค acer switch sa5-271 แบตบวม T^T

Blog นี้สร้างเพื่อ?