Flask Academy · บทเรียน

เริ่มต้นส่วนขยายด้วย init_app

เลื่อนการผูกส่วนขยายจนกว่าจะสร้างแอป

บทเรียน 3 จาก 413 ขั้นตอน

เริ่มต้นส่วนขยายด้วย init_app เป็นบทเรียน Flask Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Flask Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Flask Academy มีบทเรียนทั้งหมด 4 บทเรียน

ปัญหากลืนไม่เข้าคายไม่ออกของส่วนขยาย

แต่เดิมส่วนขยายอย่าง SQLAlchemy จะรับแอปไปทันที ซึ่งใช้ไม่ได้ภายในโรงงาน เพราะ แอป ยังไม่มีอยู่ในขณะนำเข้าโมดูล 🤔

สร้างโดยไม่ต้องมีแอป

วิธีแก้มีสองขั้นตอน ขั้นแรก สร้างอ็อบเจ็กต์ส่วนขยายในระดับโมดูลโดยไม่ส่ง แอป เข้าไป ตอนนี้ส่วนขยายจะยังไม่ถูกผูกไว้

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()  # no app yet

ผูกไว้ภายหลัง

ขั้นที่สอง เรียก init_app ภายในโรงงานเมื่อสร้างแอปเสร็จแล้ว วิธีนี้จะผูกส่วนขยายเข้ากับอินสแตนซ์นั้นโดยเฉพาะ

def create_app():
    app = Flask(__name__)
    db.init_app(app)
    return app

เหตุผลที่ต้องมีสองขั้นตอน

สามารถ นำเข้าอ็อบเจ็กต์ส่วนขยายได้จากทุกที่ ในฐานะส่วนกลาง ขณะที่การผูกจริงจะรอจนกว่าโรงงานจะเลือกการกำหนดค่า เป็นข้อดีของทั้งสองแนวทาง

นำเข้าได้จากทุกที่

เนื่องจาก db อยู่ในระดับโมดูล โมเดลและมุมมองของคุณจึงนำเข้าได้อย่างอิสระโดยไม่ต้องแตะต้องแอป ช่วยหลีกเลี่ยงการนำเข้าแบบวนรอบ

from app.extensions import db

โมดูล extensions ที่เป็นระเบียบ

รูปแบบที่ใช้กันทั่วไปคือเก็บส่วนขยายที่ยังไม่ผูกไว้ทั้งหมดในไฟล์ extensions.py ไฟล์เดียว จากนั้นให้โรงงานนำเข้าและเริ่มต้นใช้งานแต่ละส่วนขยาย

db = SQLAlchemy()
migrate = Migrate()
login = LoginManager()

เริ่มต้นใช้งานหลายรายการพร้อมกัน

ภายใน create_app คุณเพียงเรียก init_app กับส่วนขยายแต่ละรายการ โดยส่งแอปใหม่ตัวเดียวกันให้ทั้งหมด

db.init_app(app)
migrate.init_app(app, db)
login.init_app(app)

การผูกแยกตามแอป

เนื่องจากการผูกเกิดขึ้นในโรงงาน แอปสองตัวที่แตกต่างกันจึงสามารถเรียก init_app กับคลาสส่วนขยายเดียวกันได้อย่างเป็นอิสระ เหมาะอย่างยิ่งสำหรับการทดสอบ

อ่านการกำหนดค่าตอนเริ่มต้น

ส่วนขยายจะอ่านการตั้งค่า เช่น URI ของฐานข้อมูล ระหว่าง init_app ดังนั้นให้กำหนดค่าเหล่านั้นก่อนผูกส่วนขยาย

app.config["SQLALCHEMY_DATABASE_URI"] = uri
db.init_app(app)

ใช้งานภายในบริบท

หลังจาก init_app แล้ว ส่วนขยายต้องมี บริบทแอป จึงจะเรียกใช้คำสั่งค้นหาได้จริง เพราะต้องทราบว่ากำลังสื่อสารกับแอปใด

with app.app_context():
    db.create_all()

กฎทอง

สร้างส่วนขยายโดยยังไม่ผูกในตอนนำเข้า จากนั้นเรียก init_app ในโรงงาน การแยกเพียงครั้งเดียวนี้ทำให้ใช้รูปแบบทั้งหมดได้ 🔑

ตรวจสอบอย่างรวดเร็ว

เหตุใดจึงสร้างอ็อบเจ็กต์ส่วนขยายโดยไม่ใช้แอป แล้วค่อยเรียก init_app

ทบทวน

คุณได้เรียนรู้แนวทางสองขั้นตอน ได้แก่ สร้างส่วนขยายโดยยังไม่ผูก แล้วเรียก init_app ในโรงงาน ทำให้มีส่วนกลางที่นำเข้าได้ พร้อมการผูกแยกตามแอป และไม่มีการนำเข้าแบบวนรอบ 🌟

เริ่มต้นได้ฟรี

เรียนรู้ Python ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “เริ่มต้นส่วนขยายด้วย init_app” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “เริ่มต้นส่วนขยายด้วย init_app” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Flask Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Flask Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “เริ่มต้นส่วนขยายด้วย init_app”

เลื่อนการผูกส่วนขยายจนกว่าจะสร้างแอป คุณปฏิบัติ Flask Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Flask Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Flask Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “เริ่มต้นส่วนขยายด้วย init_app” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Flask Academy นี้ได้ไหม

ได้ บทเรียน Flask Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. ปัญหาของออบเจ็กต์แอปส่วนกลาง
  2. เขียนฟังก์ชัน create_app
  3. เริ่มต้นส่วนขยายด้วย init_app
  4. ลงทะเบียน Blueprints ในโรงงาน
← กลับไปที่ Flask Academy