Django 101 : บทที่ 2 การจัดการภายใน URLs , Views , Template และ Model
Django 101 : บทที่ 2 การจัดการภายใน Views
อย่างที่บอกคือ เมื่อเรา เข้า URL มันจะทำงานดังนี้
URL>> View >> Model >> Template
urls.py เปรียบเสมือนแผนที่ เพราะมันเป็นไฟล์ที่มีข้อมูลในการจับคู่ urls = views ที่อยู่ใน sub folder ของโปรเจ็ค และ app
views.py ไฟล์ ที่่รวม ฟังก์ชั่นทั้งหมด (อยู่ใน sub folder app) ถือว่า เป็นตัวจัดการการตาม request ที่เข้ามา
model.py ไฟล์ที่ใช้เชื่อมต่อ database (อยู่ใน sub folder app)
template โฟลเดอร์ที่เก็บ html (เป็น Folder ที่อยู่ใน sub folder app)
นั่นคือ เมื่อ มันได้รับค่า URLs มาแล้ว มันจะไปจับคู่กับ Views ซึ่ง Views คือ Function ทั้งหมดในการจัดการเวปไซต์ เพื่อไปดึงข้อมูล Model และไปแสดงผลผ่าน Template
เริ่มต้นเราจะดู ภายใน ไฟล์ urls.py ว่า มีอะไรอยู่ภายใน
URLs
Code เริ่มต้น จะประมาณนี้ โดยเป็นการจับคู่ ระหว่าง urls/ members ไปเรียกไฟล์ views.members(ฟังก์ชั่นชื่อ members เช่นกัน พร้อมกับส่งค่า name = "member" ด้วย)
from django.urls import path
from . import views # ใช้จุด . เพราะอยู่ใน Folder เดียวกับ View.py
urlpatterns = [
path('members/', views.members, name='members'),
path('<str:food_id>' , views.food, name = 'aaa')
# เป็นการรับค่าจาก urls ไปส่งต่อให้ view ได้ โดยต้องมี ทั้งลักษณะข้อมูลและตัวแปร
]
อธิบาย Code ดังนี้ คือ ถ้าเข้า โฟลเดอร์ members จะไปเรียกไฟล์ views ด้วยฟังก์ชั่นชื่อ members
ถึงตรงนี้ หลายคนจะสงสัยว่า ไฟล์ urls.py ควรอยู่ที่ไหน จำได้รึเปล่าครับ ว่า เราสร้าง โปรเจค ชื่อ my_tennis_club โดยมีโฟลเดอร์หลักในชื่อเดียวกัน และมี Sub Folder ชื่อ เดียวกัน
และเราได้สร้าง App ที่ชื่อ name ทำให้มี sub folder ชื่อ name ด้วย
ถึงคราวนี้เราจะสร้าง App ชื่อ Name แต่สำหรับไฟล์ url.py ต้องอยู่ใน sub folder ของโปรเจ็คชื่อ my_tennis_club
โดยในโปรเจค my_tennis_club นี้ เราอาจเขียนไฟล์ urls.py เราจะเขียนไว้ดังนี้
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('', include('members.urls')),
path('admin/', admin.site.urls),
]
อย่างไรก็ดี เราจะเรียนรู้การเขียนรายละเอียดต่างๆ ในภายหลังอีกครั้ง (แต่โค๊ดนี้ จะประมาณว่า ถ้า Path ว่าง จะไปเรียก member.urls และถ้าเข้า path ชื่อ admin จะไปเรียกไฟล์ admin.site.urls
** ไฟล์ urls.py ต้องแก้ไขทั้ง 2 ไฟล์ คือ Project และ app เลย
View
หน้าที่หลักของมันคือ การแสดงผล (ผ่านฟังก์ชั่น) คราวนี้เราจะมาดู ภายในไฟล์ view.py มันจะเริ่มต้นด้วย Code พื้นฐานนี้ (เป็น code Python)
from django.shortcuts import render
from django.http import HttpResponse
def members(request):
return HttpResponse("Hello world!")
ถึงตรงนี้ เราก็ใช้คำสั่ง run server อีกครั้ง
py manage.py runserver
หลังจากนั้น ใช้ Browser เข้าที่ 127.0.0.1:8000/members/
ก็จะเห็นเป็น hello world
Template
มาถึงตรงนี้จะต่างกับ ส่วนอื่น เพราะมันเป็น Folder ที่ใช้เก็บไฟล์ html โดยมันจะอยู่ภายใต้ Sub Folder ของ App ที่ชื่อ members อีกที
** สามารถสร้าง html ได้หลายอัน แต่ มันต้องไปสร้าง view มาเชื่อม
** ต้องการให้แสดงผลเป็น เดือนปี เป็นภาษาไทย ต้องไปเปลี่ยนที่ setting.py ของโปรเจค time zone เป็น 'Asia/bangkok' และ langauge code เป็น 'th'
my_tennis_club
manage.py
my_tennis_club/
members/
templates/
myfirst.html
โดย ไฟล์ myfirst.html จะเริ่มต้นง่ายๆ (ยังเป็น html แบบ Static ธรรมดา) ประมาณนี้
<!DOCTYPE html>
<html>
<body>
<h1>Hello World!</h1>
<p>Welcome to my first Django project!</p>
<p> id {{food_id}}</p>
# เครื่องหมาย {{ }} หรือเรียกเครื่องหมายวาร์ป คือการใส่ตัวแปร โดยใน view จะใช้ คำสั่ง
return render(request ,"html" ,context ={ 'ตัวแปรใน html', ตัวแปรที่รับจาก url})
<p>{% คำสั่ง%}</p>
# เครื่องหมาย {% คำสั่ง%} คือเราจะใส่คำสั่งอะไรลงไปก็ได้ ยกตัวอย่างเช่น {% url "name ใน urls.py"%} ก็จะลิ้งค์ไปหน้าดังกล่าวได้เลย
</body>
</html>
คราวนี้เรากลับไปแก้ไขไฟล์ view.py ในโปรเจ็คเราอีกครั้ง
from django.http import HttpResponse
from django.template import loader
def members(request):
template = loader.get_template('myfirst.html')
return HttpResponse(template.render())
ซึ่งมันเป็นคำสั่งง่ายๆ คำอธิบายคือ ให้ template นั้น ดึง html ชื่อ Myfirst.html
แล้ว คืนค่า ด้วยคำสั่ง template.render()
เทคนิก ในการแบ่งเป็น Header และ Footer (Layout)
เราจะสร้าง folder ชื่อ component ไว้ที่ app หลักก่อน แล้วสร้าง header.html กับ footer.html
แล้วเราก็ใช้ tag {% include %}
แต่ยังมี เทกนิคที่ง่ายกว่า แต่ซับซ้อนกว่า คือการสร้าง File Base มันจะเป็นไฟล์ html เช่นกัน แต่มันจะเป็น โครง
{% include 'header.html' %}
{% block ชื่อบล็อก %}{% end block %}
{% include 'footer.html' %}
ไฟล์ html หลักจะเรียกใช้ด้วยคำสั่ง
{% extend "File Base.html" %}
{% block ชื่อที่อยู่ใน base.html %}
เนื้อหา
{% end block %}
Model
สุดท้ายที่เราจะเรียนรู้ คือ การเชื่อมต่อฐานข้อมูล กับ View ผ่าน Model ( Model เชื่อมต่อกับ Database ได้แค่ 1 อันเท่านั้น)
อย่างไรก็ดี Django จะเชื่อมต่อ Database ด้วย Django ORM (Object Relational Mapper) เท่านั้น
ยกตัวอย่าง กรณี เราเชื่อมต่อกับ SQLite เราจะต้องมีไฟล์ ชื่อ db.sqlite3 วางไว้ที่ sub folder ของโปรเจค
ถึงตรงนี้เราเรียน Views ที่จะดึงข้อมูลก่อน
all_aa = [{ 'id' : 1, 'title' : aa}
{ 'id' : 2, 'title' : bb}
]
def aaa(request )
context= {'all':all_aa}
return render(request ,"html",context)
เทคนิการกรอง
def bbb(request , id_aa )
one = [f for f in all_aa if f['id' ] = id_aa][0]
context = {'all':one}
return render(request ,"html",context)
ส่วน html
<% for all in alls%>
{{all.title| floatformat:'g' }} # เป็นการใส่ filter ให้ออกมาเป็น คอมม่าคั่นหลักพัน
<%if %>
<%endif %>
<% endfor %>
ไฟล์ models.py พื้นฐานจะมีคำสั่งดังนี้
การสร้าง Table (Database)
from django.db import models
class Member(models.Model):
firstname = models.CharField(max_length=255)
lastname = models.CharField(max_length=255)
คำสั่งนี้จะเป็นการสร้าง Table ชื่อ Members โดยฟิลด์ชื่อ firstname กำหนดให้มีค่าสูงสุด 255 ตัวอักษร และ lastname
ถึงตรงนี้เมื่อสร้างไฟล์ models.py ไว้เรียบร้อยแล้ว เราจะต้องใช้คำสั่ง (ทุกครั้งที่มีการ สร้าง/ แก้ไข Model เนื่องจาก มันจะไปสร้าง Scripts พิเศษขึ้นมาอีกที)
py manage.py makemigrations members
ผลที่ได้มันจะแจ้งว่า มีการ Create model ชื่อ member เรียบร้อยแล้ว
Migrations for 'members':
members\migrations\0001_initial.py
- Create model Member
(myworld) C:\Users\Your Name\myworld\my_tennis_club>
โดยมันจะสร้างไฟล์ Scripts ไว้ชื่อ 00001_innitial.py ไว้ที่โฟลเดอร์ migrations
my_tennis_club/members/migrations/0001_initial.py:
ความคิดเห็น
แสดงความคิดเห็น