0Pricing
Django Academy · บทเรียน

การเขียนมิดเดิลแวร์แบบกำหนดเอง

เชื่อมเข้ากับทุกคำขอและการตอบกลับ

การเขียนมิดเดิลแวร์แบบกำหนดเอง เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. สัญญาณ post_save และ pre_delete
  2. การเชื่อมต่อรีซีฟเวอร์อย่างถูกต้อง
  3. การเขียนมิดเดิลแวร์แบบกำหนดเอง
  4. ลำดับมิดเดิลแวร์และ process_view
← กลับไปที่ Django Academy