มือใหม่ Django part 1
พูดถึง Python บอกเลยตัวผม newbie (มือใหม่ — กาก) และถ้าจะให้นึกถึง products ที่เกิดจาก Python ตอนนี้ยิ่งคิดไม่ออก เพื่อนที่รู้จักบอกเว็บไง ลองดู Django
เพื่อนผมหลายคนที่เขียน Python พอได้จับ Django นี่ถึงกับว้าวกันมาก มากเวอร์ ชนิดที่ผมสงสัยว่าอะไรที่ทำให้พวกเขารู้สึกอย่างนั้น?
เปิด Google พิมพ์ django get started
ได้ ผลลัพธ์
จิ้มไปอย่าได้สงสัย try a tutorial
ทีนี้เขาก็ถามเราว่าเครื่องได้ติดตั้ง Python ไว้แล้วหรือยัง ใครที่ยังก็ให้ติดตั้ง Python 3 เลยนะครับ หรือจะติดตั้งตามผมก็ได้ เพราะผมเคยเขียน Robot Framework ด้วย SeleniumLibrary อยู่บ้าง ที่นี่
ติดตั้ง Python แล้วพิมพ์ python3 —-version
ผลลัพธ์
ติดตั้ง Django
มี python3 แล้วติดตั้ง Django ไม่ยากเลย พิมพ์จ้า
python3 -m pip install Django
ผลลัพธ์
ตรวจสอบเวอร์ชันของมันอีกครั้ง
python3 -m django --version
ผลลัพธ์
มือใหม่รวมถึงตัวผมบ่อยครั้งเมื่อพิมพ์คำสั่ง python มักลืมเลขสามต่อท้าย ถ้าใช้เครื่อง MacOS มันจะมี Python build in มาให้ซึ่งเป็นเวอร์ชัน 2 แถมบอกอีกว่าไม่แนะนำให้ใช้ ฉะนั้นอย่าลืมเลขสามล่ะ แบบนี้นะครับ
python3
ข้อควรทราบอีกเล็กน้อยที่หากไม่ทราบแล้วอาจก่อความรำคาญเนื่องจากความไม่เข้าใจได้ เข้าใจว่าไม่ชอบภาษาอังกฤษ แต่อดทนหน่อย นิดเดียว
เว็บอย่างเป็นทางการบอกว่า
This tutorial is written for Django 3.1, which supports Python 3.6 and later. If the Django version doesn’t match, you can refer to the tutorial for your version of Django by using the version switcher at the bottom right corner of this page, or update Django to the newest version.
เขาใช้ Django เวอร์ชัน 3.1 (ส่วนของเราคือ 3.1.6) ที่เวอร์ชันนี้จะรองรับ Python 3.6 เป็นต้นไปนะ (ส่วนของผมคือ 3.9.1 สบายเลย) ใครที่ใช้เวอร์ชันไม่เป็นตามที่กล่าวนี้ให้หาแบบสอนที่ตรงตามที่ใช้โดยมองไปที่มุมขวาล่างของเว็บ ดูรูปเลยแล้วกัน
เพื่อนผมว่า Django มันต้องการฐานข้อมูล ผมก็สงสัยไม่มีได้ไหม? ผมจะไม่เชื่อเพื่อนผมในตอนนี้และผมจะพาไปต่อ
สร้างโปรเจกต์
ดูจากแบบสอนแล้ว command line ล้วนๆ ยังไม่มีแนะนำ IDE เลยสักตัว ไม่เป็นไร ตามเขาไปก่อน
เราจะสร้างโปรเจกต์ชื่อ mysite หาพื้นที่ที่ชอบแล้วค่อยพิมพ์
django-admin startproject mysite
ผลลัพธ์
ขอใช้โปรแกรม MS Code ไปเปิดชมนะครับ
- mysite คือชื่อโปรเจกต์ ไม่ได้สำคัญอะไรกับ Django เราสามารถเปลี่ยนชื่อได้ตลอด
- manage.py ไฟล์นี้คำสัญมาก เป็นช่องทางที่เราจะปฏิสัมพันธ์กับ Django
- ภายใน mysite เช่น asgi.py, settings.py, urls.py, wsgi.py พวกมันคือ Python packages
- __init__.py ไฟล์นี้ว่างเปล่า แต่มันช่วยบอกกับ Python ว่าภายในโปรเจกต์นี้มีไฟล์ Python packages อยู่นะ
เนื่องจาก Django คือ web framework ของ Python ดังนั้น Python package ต่อไปนี้จึงทำหน้าที่สำคัญยิ่ง
- settings.py ตามชื่อคือกำหนดค่า config ต่างๆภายในโปรเจกต์
- urls.py จัดการ url ต่างๆของเว็บ
- asgi.py เป็น entry-point มันเข้าใจ web server ประเภท ASGI
- wsgi.py เป็น entry-point มันเข้าใจ web server ประเภท WSGI
WSGI vs ASGI
มือใหม่ต้องทราบก่อนว่าพื้นฐานของเว็บต้องมี ผู้เรียก และ ผู้ถูกเรียก ผู้เรียกเราจะเรียกว่า client ส่วนผู้ถูกเรียกเราจะเรียกว่า server
client จะส่งคำขอไปยัง server เรียกว่า request และไม่นานหลังจากนั้น server จะส่งคำตอบหรือ resource กลับไปยัง client เรียกว่า response
ผู้ที่ทำหน้าที่จัดการ request และ response เราจะเรียกว่า web server ซึ่งจะเป็นโปรแกรมที่ถูกติดตั้งอยู่ในเครื่อง server อีกที มันค่อยทำหน้าที่รับทราบคำขอและส่งคำตอบกลับไปหาผู้ขอนั้นอย่างซื่อสัตย์ที่สุด
Python มี web server อยู่ 2 ประเภทตามแบบสอนนี้ ได้แก่ WSGI (ของเก่าดั่งเดิม) และ ASGI
โดยทั่วไปแล้วเมื่อเลือกใช้ ASGI มันสามารถเข้าใจ WSGI ด้วย
WSGI ย่อมาจาก Web Server Gateway Interface ทำงานแบบ synchronous เหมาะกับคำขอที่ต้องการคำตอบในระยะเวลาไม่นานนัก คำขอจะเข้าคิวและทยอยถูกนำไปประมวลผล ให้นึกถึงเข้าแถวซื้ออาหารในโรงเรียนก็ได้ (ห้ามแซงคิว)
รูปภาพด้านล่างนี้ client คือ browser ทางขวาสุดส่งคำขอไปยัง WSGI server
ASGI ย่อมาจาก Asynchronous Server Gateway Interface ทำงานแบบ asynchronous คำขอที่ส่งมาจาก client จะไม่ได้รับการตอบสนองทันทีทันใดจาก server ดังนั้น client จึงไม่ต้องรอคอยคำตอบแบบเป็นลำดับเพื่อจะทำงานถัดไป (สามารถทำงานถัดไปได้เลย) คำตอบที่ต้องการไม่มีลำดับที่แน่นอน web server นี้อนุญาตให้คำขออื่นๆทำงานเกือบพร้อมกันได้ พูดง่ายๆว่าคำขอใดประมวลผลเสร็จก่อนก็ได้คำตอบก่อน
รูปด้านล่างนี้ client เชื่อมต่อกับ server ด้วย socket ส่วน App หรือโปเจกต์ของเราจะใช้การฟังที่เรียกว่า event listener เป็นผลให้ได้ event message เมื่อประมวลผลแล้วเสร็จ (เวลาไม่แน่นอน)
Run
เป็นธรรมดาที่ web framework สมัยใหม่พร้อมทำงานทันทีหลังจากติดตั้งเสร็จ (ใช้ค่ากำหนด default ทั้งสิ้น) เรามารันโปรเจกต์นี้กันครับ (อย่าลืมเข้าไปในโปรเจกต์ก่อน)
python3 manage.py runserver
ผลลัพธ์
ตัวอักษรสีแดงเกี่ยวกับ database migrations นั่นยังไม่ต้องสนใจนะ
ตรงไปเปิด browser ที่ http://127.0.0.1:8000/ หรือ http://localhost:8000/
ผลลัพธ์
เราเรียก server ที่รันโปรเจกต์ขณะนี้ว่า development server ใช้ระหว่างการพัฒนา Django web framework เท่านั้น ห้ามใช้กับ production เด็ดขาดนะครับ (เรื่องของความปลอดภัย)
development server นี้ไม่จำเป็นต้อง restart เมื่อแก้ไขโค้ด Python ยกเว้นว่าได้เพิ่มไฟล์ซึ่งไม่ทำให้ server รับรู้จึงค่อย restart ด้วยตนเองเป็นกรณีไป
ถ้าต้องการเปลี่ยน port ที่ใช้รัน เช่น เปลี่ยนเป็น 8080 พิมพ์
python3 manage.py runserver 8080
บทความนี้ไว้เท่านี้ก่อน บทความถัดไปเราจะมาเล่นกับ Polls app (เขาตั้งชื่อมันว่า Polls) เป็นอย่างไร มันส์กว่านี้ไหม พบกันครับ
อ่านต่อ
อ้างอิง
https://docs.djangoproject.com/en/3.1/intro/tutorial01/
https://asgi.readthedocs.io/en/latest/introduction.html#what-s-wrong-with-wsgi