เริ่มต้นส่วนขยายด้วย init_app
เลื่อนการผูกส่วนขยายจนกว่าจะสร้างแอป
เริ่มต้นส่วนขยายด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ปัญหาของออบเจ็กต์แอปส่วนกลาง
- เขียนฟังก์ชัน create_app
- เริ่มต้นส่วนขยายด้วย init_app
- ลงทะเบียน Blueprints ในโรงงาน