การเขียนมิดเดิลแวร์แบบกำหนดเอง
เชื่อมเข้ากับทุกคำขอและการตอบกลับ
การเขียนมิดเดิลแวร์แบบกำหนดเอง เป็นบทเรียน Django Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Django Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Django Academy มีบทเรียนทั้งหมด 4 บทเรียน
Middleware ในประโยคเดียว
Middleware คือชั้นที่ครอบทุกคำขอและการตอบกลับ ทำให้คุณเรียกใช้โค้ดก่อนมุมมองและหลังจากมุมมองส่งผลลัพธ์กลับมาได้
โมเดลหัวหอม
ลองนึกภาพ middleware เป็นชั้นของหัวหอมที่ล้อมรอบมุมมอง คำขอจะเดินทางเข้าไปด้านในผ่านแต่ละชั้น จากนั้นการตอบกลับจะเดินทางย้อนกลับออกมา
รูปแบบสมัยใหม่
Middleware สมัยใหม่คือสิ่งที่เรียกใช้งานได้ ซึ่งรับ get_response หนึ่งครั้งตอนเริ่มต้น และส่งคืนตัวจัดการที่ Django เรียกในแต่ละคำขอ
Middleware ขั้นต่ำ
ฟังก์ชันโรงงานจะเก็บ get_response ไว้ และฟังก์ชันด้านในจะเรียกใช้โค้ดของคุณคร่อมรอบการเรียกนั้น รูปแบบสิ่งที่เรียกใช้งานได้นี้คือทั้งหมดที่ Django ต้องการ
def simple(get_response):
def handler(request):
# before the view
response = get_response(request)
# after the view
return response
return handlerโค้ดก่อนมุมมอง
ทุกสิ่งที่อยู่ก่อน get_response จะทำงานระหว่างทางเข้า เหมาะสำหรับการบันทึกข้อมูล การจับเวลา หรือการแนบข้อมูลเข้ากับคำขอ
def handler(request):
request.start = time.time()
return get_response(request)โค้ดหลังมุมมอง
ทุกสิ่งที่อยู่หลัง get_response จะทำงานระหว่างทางออก คุณสามารถอ่านหรือแก้ไขการตอบกลับก่อนส่งไปยังเบราว์เซอร์ได้ที่นี่
response = get_response(request)
response["X-App"] = "demo"
return responseรูปแบบที่ใช้คลาส
คุณยังสามารถเขียน middleware เป็นคลาสที่มี __init__ และ __call__ ได้ รูปแบบนี้ทำงานเหมือนแบบฟังก์ชัน แต่จัดกลุ่ม hook ที่เกี่ยวข้องไว้อย่างเป็นระเบียบ
class Timer:
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
return self.get_response(request)ลงทะเบียนใน MIDDLEWARE
Middleware จะทำงานก็ต่อเมื่อคุณระบุเส้นทางแบบมีจุดของมันไว้ในการตั้งค่า MIDDLEWARE ภายใน settings.py
MIDDLEWARE = [
"django.middleware.security.SecurityMiddleware",
"myapp.middleware.simple",
]ตัดการทำงานของคำขอ
หาก middleware ส่งคืนการตอบกลับเองแทนการเรียก get_response มันจะตัดการทำงานของสายโซ่ และมุมมองจะไม่ทำงาน
หนึ่งหน้าที่ต่อ Middleware หนึ่งตัว
ให้ middleware แต่ละตัวมุ่งเน้นที่หน้าที่เดียว เช่น การจับเวลาหรือการตรวจสอบสิทธิ์ ชั้นขนาดเล็กจะจัดลำดับและแก้ไขข้อผิดพลาดได้ง่ายกว่า
การใช้งานจริงที่พบบ่อย
ทีมต่าง ๆ ใช้ middleware แบบกำหนดเองสำหรับบันทึกคำขอ เพิ่มส่วนหัว จัดการภาษาและภูมิภาค และตรวจสอบสิทธิ์แบบเบา ๆ ทั่วทั้งเว็บไซต์
ตรวจสอบอย่างรวดเร็ว
ตรวจสอบว่า middleware สมัยใหม่ส่งต่อการทำงานไปยังชั้นถัดไปอย่างไร
สรุป: การสร้าง Middleware
คุณได้สร้าง middleware แบบกำหนดเอง ซึ่งเป็นสิ่งที่เรียกใช้งานได้และรับ get_response มีโค้ดก่อนและหลังมุมมอง และลงทะเบียนไว้ในการตั้งค่า MIDDLEWARE ✅
คำถามที่พบบ่อย
บทเรียน “การเขียนมิดเดิลแวร์แบบกำหนดเอง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเขียนมิดเดิลแวร์แบบกำหนดเอง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Django Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Django Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเขียนมิดเดิลแวร์แบบกำหนดเอง”
เชื่อมเข้ากับทุกคำขอและการตอบกลับ คุณปฏิบัติ Django Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Django Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Django Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การเขียนมิดเดิลแวร์แบบกำหนดเอง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Django Academy นี้ได้ไหม
ได้ บทเรียน Django Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- สัญญาณ post_save และ pre_delete
- การเชื่อมต่อรีซีฟเวอร์อย่างถูกต้อง
- การเขียนมิดเดิลแวร์แบบกำหนดเอง
- ลำดับมิดเดิลแวร์และ process_view