Flask Blueprints คืออะไรกันแน่?


180

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

ฉันเคยใช้มันในเว็บแอพของฉัน แต่ฉันไม่เข้าใจว่ามันคืออะไรหรือมันเข้ากับแอพของฉันได้อย่างไร มันคล้ายกับตัวอย่างของแอพของฉัน แต่ไม่มาก เอกสารมีความครอบคลุม แต่ฉันขอคำอธิบายจากคนธรรมดาหรือการเปรียบเทียบที่ให้ความกระจ่างแจ้งเพื่อจุดประกายให้ฉัน ฉันรู้สึกงงงวยอย่างเพียงพอเมื่อเพื่อนร่วมงานขอให้ฉันอธิบายพิมพ์เขียว Flask ให้พวกเขาที่ฉันเลือกที่จะถามที่นี่

คำตอบ:


287

พิมพ์เขียวเป็นเทมเพลตสำหรับสร้าง "ส่วน" ของเว็บแอปพลิเคชัน คุณสามารถคิดว่ามันเป็นแม่พิมพ์:

แม่พิมพ์เหรียญที่มีเหรียญทองถูกแกะออกใหม่

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

# An example
from flask import Blueprint

tree_mold = Blueprint("mold", __name__)

@tree_mold.route("/leaves")
def leaves():
    return "This tree has leaves"

@tree_mold.route("/roots")
def roots():
    return "And roots as well"

@tree_mold.route("/rings")
@tree_mold.route("/rings/<int:year>")
def rings(year=None):
    return "Looking at the rings for {year}".format(year=year)

นี่เป็นแม่พิมพ์ง่าย ๆ สำหรับทำงานกับต้นไม้ - มันบอกว่าแอปพลิเคชันใด ๆ ที่เกี่ยวข้องกับต้นไม้ควรให้การเข้าถึงใบของมันรากของมันและแหวนของมัน (ปี) โดยตัวมันเองมันคือกระสุนกลวง - มันไม่สามารถกำหนดเส้นทางได้มันไม่สามารถตอบสนองได้จนกว่ามันจะสร้างความประทับใจให้กับแอปพลิเคชัน:

from tree_workshop import tree_mold

app.register_blueprint(tree_mold, url_prefix="/oak")
app.register_blueprint(tree_mold, url_prefix="/fir")
app.register_blueprint(tree_mold, url_prefix="/ash")

เมื่อมันถูกสร้างขึ้นมันอาจจะ "ประทับใจ" ในแอพลิเคชันโดยใช้register_blueprintฟังก์ชั่น - นี่ "ประทับใจ" url_prefixแม่พิมพ์ของพิมพ์เขียวกับการประยุกต์ใช้ในสถานที่ที่ระบุโดยที่


5
นี่เป็นบทความที่ดีสำหรับโครงสร้างแอปพลิเคชันที่ใช้พิมพ์เขียว explflask.com/en/latest/blueprints.html
Devasish

5
ฉันยังสับสนอยู่ หมายความว่าoak/leavesและfir\leavesจะชี้รหัสเดียวกันหรือไม่ นอกจากนี้อะไรคือจุดประสงค์ของสตริงmoldในBlueprint("mold", __name__)
Codevalley

8
ใช่ทั้งสองoak/leavesและจะถูกจัดการโดย fir/leaves เป็นชื่อของพิมพ์เขียวและใช้สำหรับแก้ความกำกวมเมื่อพูดถึงเส้นทาง (เช่นvs. ) def leaves"mold"someBlueprint.routeNameanotherBlueprint.routeName
Sean Vieira

2
ฉันจะเข้าใช้url_prefixงานฟังก์ชั่นได้อย่างไร? พูดเพื่อตรวจสอบว่ามันเป็นไม้โอ๊คหรือเฟอร์? tree_mold.url_prefixให้ฉันNone
Mellkor

3
@Melkor - ใช้งานง่ายurl_for('.relative_route_name')(สังเกตจุดนำ) ตัวอย่างเช่นurl_for('.roots')จะให้ URL ที่กำหนดขอบเขตอย่างถูกต้องที่แต่ละจุดที่เมาท์โดยอัตโนมัติ
ฌอน Vieira

6

ตามที่ระบุไว้ในความคิดเห็นโดย @Devasishบทความนี้ให้คำตอบที่ดี:

http://exploreflask.com/en/latest/blueprints.html

การอ้างอิงจากบทความ:

ตัวอย่างนี้จะเป็น Facebook หาก Facebook ใช้ Flask มันอาจมีพิมพ์เขียวสำหรับหน้าแบบสแตติก (เช่นการลงชื่อออกจากบ้านลงทะเบียนเกี่ยวกับ ฯลฯ ) แดชบอร์ด (เช่นฟีดข่าว) โปรไฟล์ (/ robert / about และ / robert / photos) การตั้งค่า (/ settings / ความปลอดภัยและ / settings / ความเป็นส่วนตัว) และอีกมากมาย ส่วนประกอบเหล่านี้ทั้งหมดใช้เค้าโครงและสไตล์ทั่วไปร่วมกัน แต่แต่ละรายการก็มีเค้าโครงของตัวเองเช่นกัน

นี่คือการตีความที่ดีมากโดยเฉพาะอย่างยิ่งส่วน "ถ้า Facebook ใช้ Flask" มันทำให้เรามีสถานการณ์ที่เป็นรูปธรรมในการมองเห็นว่าพิมพ์เขียวใช้งานได้จริงอย่างไร


3

ฉันเพิ่งสะดุดตัวเองและสับสนหลังจากอ่านแหล่งเอกสารไม่กี่ ตอนแรกฉันคิดว่ามันเป็นลักษณะการใช้งาน C # / Java ที่คุณกำหนดสิ่งบางอย่าง แต่ไม่ต้องกังวลเกี่ยวกับมันกำหนดไว้ในภายหลัง อย่างไรก็ตามฉันสะดุดหน้านี้ซึ่งทำให้มันอยู่ในเงื่อนไขมาก laymens (และค่อนข้างเฮฮาเหตุการณ์วันปัจจุบัน) https://hackersandslackers.com/flask-blueprints/

ประโยชน์หลักอย่างหนึ่งที่กล่าวถึงในลิงค์และให้ฉันมีความคิดที่ชัดเจนเกี่ยวกับการใช้งานในโลกแห่งความเป็นจริงคือฉันสามารถจัดระเบียบ / แบ่งแอพอย่างมีประสิทธิภาพในหลายส่วนที่ต้องเกี่ยวข้องกับเรื่องของตัวเองเท่านั้น ดังนั้นจึงมีการห่อหุ้มที่ออกแบบมาบางส่วน

แก้ไข: ฉันกำลังใช้มันเพื่อแบ่งรหัส webapps ของฉัน มันเป็นการตัดสินใจที่ดีเช่นกันเพราะฉันพบว่านักออกแบบนำต้องการสร้างส่วนหน้าใน Vue.js ซึ่งฉันยังไม่ได้ใช้ แต่การดูไฟล์โครงการจะดูยุ่งเหยิงกว่าและอาจทำให้การตั้งชื่อชนกันได้ง่าย


0

สำหรับโครงการขนาดใหญ่รหัสทั้งหมดของคุณไม่ควรอยู่ในไฟล์เดียวกัน แต่คุณสามารถแบ่งส่วนหรือแยกรหัสที่ใหญ่กว่าลงในไฟล์แยกกันส่วนใหญ่ขึ้นอยู่กับการใช้งาน เหมือนอิฐก่อกำแพง

หวังว่านี่จะช่วยได้ เนื่องจากนี่เป็นคำถามเชิงทฤษฎีจึงไม่มีการโพสต์รหัส

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.