)
快速入門Flask——這個工具通過自動地幫你搞定了創(chuàng)建、使用, 以及最后清理那些大家平時特別愛用的一類對象, 以此來讓另一類東西的使用變得更加輕松簡單。它不僅順手添加了一些挺管用的額外功能, 不過說來說去, 它干活的方式跟原來那個沒加功能的版本其實還是一樣的, 依舊保持著一摸一樣的運行邏輯。這個頁面會讓你一步一步地了解Flask的基本使用方法, 如果你想看到所有詳細的功能并且進行自定義操作的話, 請繼續(xù)查閱這份文檔剩下的內(nèi)容, 這里面還包含了有關(guān)對象的API說明文檔。查看 文檔Flask- 是對某物的一個包裝器。您應(yīng)該參考那個教程以便弄明白該怎么去使用它, 并且要去翻閱它的文檔, 以此來獲取關(guān)于它有啥功能的詳細信息。請注意這些文檔里面展示的只是怎么把 Flask- 這個本身給設(shè)置好, 并沒有講怎么去用別的什么東西。因為 Flask- 會自行搞定引擎還有作用域會話的事情, 所以在那些內(nèi)容上面您是完全可以跳過教程里面對應(yīng)的環(huán)節(jié)而不需要處理的。本指南是基于您使用的是2.x這個前提來進行編寫的。因為它提供了全新的應(yīng)用程序設(shè)計接口用于對模型的定義。并且它能夠更好地支持類型提示和把數(shù)據(jù)變成類這種做法。如果您現(xiàn)在用的是1.x。那么就請您去閱讀那篇叫做傳統(tǒng)快速入門的文章。安裝Flask這個軟件可以在PyPI這個網(wǎng)站上找到, 用戶可以使用各式各樣的工具來把它裝上。拿pip這款軟件來舉例, 如果要用它來給Flask做安裝操作或者更新操作的的話, 需要用到最新版本的那些內(nèi)容。$ pip install -U Flask-SQLAlchemy把擴展給初始化完成。第一步, 我們要使用那個構(gòu)造函數(shù)去創(chuàng)建一個叫做 db 的對象出來。將 或者 的子類這一種情況, 傳遞給那個構(gòu)造函數(shù)去使用。from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyfrom sqlalchemy.orm import DeclarativeBaseclass Base(DeclarativeBase):passdb SQLAlchemy(model_classBase)你可以到那里去看看關(guān)于自定義那個基礎(chǔ)模型類到底還有那些更多的信息, 這里提到的是在模型還有在表里面去了解更多。關(guān)于 對象在構(gòu)造完成之后, db 對象將會允許您對用于定義模型的類進行訪問, 同時也會對用于執(zhí)行查詢的部分提供支持以進行操作。那個對象本身還可以使用別的一些參數(shù), 通過這些參數(shù)來對它所要管理的那些具體東西進行定制性的安排。配置擴展在下一步的工作當(dāng)中, 我們需要把擴展的內(nèi)容給連接到那個用 Flask 弄的應(yīng)用程序里去, 這里頭唯一必須要去做的配置, 就是這個鍵的內(nèi)容了, 這個鍵實際上就是一個連接字符串的東西, 它主要就是去告訴那個東西到底應(yīng)該要去連哪個數(shù)據(jù)庫的。建立好Flask程序?qū)ο蟮倪@一步操作完成之后, 再把所有的配置信息給加載進來, 接著去調(diào)用一下那擴展類里面的那些關(guān)于初始化的方法來完成啟動過程, 這里頭, 就拿那個數(shù)據(jù)庫的連接做個例子, 畢竟這個數(shù)據(jù)庫里頭存放的內(nèi)容是被放在咱們那個所謂的應(yīng)用實例文件夾里頭的。# create the appapp Flask(__name__)# configure the SQLite database, relative to the app instance folderapp.config[SQLALCHEMY_DATABASE_URI] sqlite:///project.db# initialize the app with the extensiondb.init_app(app)請參見相關(guān)的配置說明, 以便弄懂連接字符串以及那些正在被使用的其他配置鍵。定義模型子類化 db.Model 以定義模型類。該模型將通過將 類名轉(zhuǎn)換為 來生成表名。from sqlalchemy import Integer, Stringfrom sqlalchemy.orm import Mapped, mapped_columnclass User(db.Model):id: Mapped[int] mapped_column(primary_keyTrue)username: Mapped[str] mapped_column(uniqueTrue)email: Mapped[str]您可以參閱關(guān)于模型和表格的部分, 以此獲取更多有關(guān)如何定義以及創(chuàng)建這些模型與表格的詳細信息。創(chuàng)建表在你已經(jīng)把所有模型還有表都定義好了之后, 就去調(diào)用那個操作來在數(shù)據(jù)庫里面把那個表的架構(gòu)給創(chuàng)建出來。因為這個操作是需要一個應(yīng)用程序上下文才能運行的。既然你知道你現(xiàn)在并不處在一個請求的環(huán)境里面, 那就需要你親自動手去手動去創(chuàng)建一個那個東西。with app.app_context():db.create_all()你要是把模型放到了其他模塊里面去定義的話, 那么在正式調(diào)用的步驟還沒開始之前, 你得先把這些模型給導(dǎo)入進來才行, 不然的話, 調(diào)用那邊就壓根兒搞不清楚這些模型到底是什么東西了。當(dāng)數(shù)據(jù)庫中已經(jīng)存在某些數(shù)據(jù)表的時候, 它是不會對這些表進行更新操作的。要是你修改了模型里頭所包括的那些列的話, 那么你就應(yīng)當(dāng)使用像 Flask- 這些遷移庫來進行操作, 以便能夠生成用于更新數(shù)據(jù)庫結(jié)構(gòu)的遷移文件來把那些變動給應(yīng)用進去。查詢數(shù)據(jù)在Flask視圖或者命令行接口命令里面, 可以直接用 db.這個前綴來執(zhí)行數(shù)據(jù)庫查詢操作, 并且也可以借此對模型里保存的數(shù)據(jù)進行各種修改處理。程序會主動給每一個模型定下一種特定的辦法, 這種辦法的主要任務(wù), 就是把各種各樣的帶有名稱的參數(shù), 統(tǒng)統(tǒng)交給那些對應(yīng)的數(shù)據(jù)庫里的列以及其他的相關(guān)屬性去處理。db..add(obj) 這個操作的作用是把一個對象添加進當(dāng)前的會話里去, 這樣它就有資格被插入到數(shù)據(jù)庫中了, 如果你修改了這個對象的屬性, 那么該對象自身也就跟著更新了接著看 db..(obj) 這一部分, 它的作用其實是刪除某個指定的對象, 這里你要特別記住, 在你完成了數(shù)據(jù)的修改動作、執(zhí)行了添加操作或者是進行了刪除任務(wù)之后, 一定要去調(diào)用一下 mit() 這個方法才行。使用數(shù)據(jù)庫查詢語言來編寫查詢, 目的是為了從數(shù)據(jù)庫內(nèi)選取需要的數(shù)據(jù)內(nèi)容。建立查詢語句是這一工具的主要功能所在, 所以您應(yīng)當(dāng)閱讀其提供的關(guān)于選擇內(nèi)容的具體教程, 這樣才能全面地了解該如何操作。在通常情況下, 程序員會使用特定的括號包含參數(shù)的方法, 也就是點號加括號這種形式來調(diào)用方法, 以此獲取到一個結(jié)果列表, 或者是用同樣形式的另一個方法來僅僅獲取一個單獨的結(jié)果。app.route(/users)def user_list():users db.session.execute(db.select(User).order_by(User.username)).scalars()return render_template(user/list.html, usersusers)app.route(/users/create, methods[GET, POST])def user_create():if request.method POST:user User(usernamerequest.form[username],emailrequest.form[email],)db.session.add(user)db.session.commit()return redirect(url_for(user_detail, iduser.id))return render_template(user/create.html)app.route(/user/)def user_detail(id):user db.get_or_404(User, id)return render_template(user/detail.html, useruser)app.route(/user//delete, methods[GET, POST])def user_delete(id):user db.get_or_404(User, id)if request.method POST:db.session.delete(user)db.session.commit()return redirect(url_for(user_list))return render_template(user/delete.html, useruser)在相關(guān)文檔中, 您或許會發(fā)現(xiàn)有使用 Model.query 來構(gòu)造查詢條件的情況。實際上, 這屬于一種比較早期的操作接口, 并且已經(jīng)被明確指出處于過時的狀態(tài)。因此, 更為推薦的做法是直接通過 db... (以及嵌套的 db(...)...)) 來獲取數(shù)據(jù)源對象, 并在此基礎(chǔ)上進行數(shù)據(jù)庫操作。請查閱關(guān)于修改和查詢數(shù)據(jù)的內(nèi)容, 以獲取有關(guān)查詢的更加詳實的信息。需要記住的內(nèi)容通常情況下, 您應(yīng)該按照常規(guī)的做法去使用。您需要基于此來擴展實例, 進而完成創(chuàng)建、配置的工作, 并且提供對下列對象的訪問權(quán)限。