每週總結2

晨观夕發表於2024-07-20

今天測試 沒過

後端程式碼出問題了nnd

安裝相應的python 包

# 用於flask在使用ORM模型運算元據庫
pip install flask-sqlalchemy
# Python運算元據庫的驅動程式
pip install pymysql
# 對密碼加密和解密
pip install cryptography
# 用於將ORM模型的變更同步到資料庫中
pip install flask-migrate
1
2
3
4
5
6
7
8
config.py檔案
在根目錄下,常見一個config.py的python檔案,用來存放配置項。

class BaseConfig:
SECRET_KEY = 'linql_test'
SQLALCHEMY_TRACK_MODIFICATIONS = False

# 開發環境
class DevelopmentConfig(BaseConfig):
# 配置連線資料庫
HOSTNAME = '192.168.3.5' #伺服器地址
PORT = 3306 #預設埠號
USERNAME = 'root'
PASSWORD = 'root'
DATABASE = 'pythonbbs' #資料庫名
SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"

# 測試環境
class TestingConfig(BaseConfig):
# 配置連線資料庫
HOSTNAME = '192.168.3.5' # 伺服器地址
PORT = 3306 # 預設埠號
USERNAME = 'root'
PASSWORD = 'root'
DATABASE = 'pythonbbs' # 資料庫名
SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"

# 生產部署環境
class ProductionConfig(BaseConfig):
# 配置連線資料庫
HOSTNAME = '192.168.3.5' # 伺服器地址
PORT = 3306 # 預設埠號
USERNAME = 'root'
PASSWORD = 'root'
DATABASE = 'pythonbbs' # 資料庫名
SQLALCHEMY_DATABASE_URI = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8mb4"
在app.py中,繫結配置

from flask import Flask
import config

app = Flask(__name__)
# 引入開發環境
app.config.from_object(config.DevelopmentConfig)


@app.route('/')
def hello_world():
return 'Hello World!'


if __name__ == '__main__':
app.run()
exts.py檔案
在根目錄裡建立exts.py檔案,主要用來存放一些第三方外掛的物件。
如:SQLAlchemy物件、Flask-Mail物件等。
目的,是為了防止迴圈引用。

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
1
2
回到app.py中,然後匯入db變數,再透過db.init_app(app)完成初始化。

from flask import Flask
import config
from exts import db

app = Flask(__name__)
# 引入開發環境
app.config.from_object(config.DevelopmentConfig)
# 初始化db
db.init_app(app)

@app.route('/')
def hello_world():
return 'Hello World!'


if __name__ == '__main__':
app.run()
blueprints模組
透過藍圖來模組化,建立一個blueprints的包,用於存放藍圖模組。
在專案名稱上右擊,New->Python Package
並在,blueprints下,分別建立名為:cms、front和user的python檔案


在cms.py中建立藍圖物件

from flask import Blueprint
bp = Blueprint("cms",__name__,url_prefix="/cms")
1
2
在front.py中建立藍圖物件

from flask import Blueprint
bp = Blueprint("front",__name__,url_prefix="")

在user.py中建立藍圖物件

from flask import Blueprint
bp = Blueprint("user",__name__,url_prefix="/user")
1
2
建立了藍圖物件,並指定了url字首,因front是面向前臺的,所以url為空
建立藍圖物件後,還需要在app.py中完成註冊。

一、Flask後端介面技術

Flask是由python開發的輕量的web框架,小巧,靈活,一個指令碼就可以啟動一個web專案。

Flask的程式思路可以從點餐平臺的點餐流程說開去。

1、由點餐說到flask返回頁面內容

說到點餐,一般是在餓了嗎或者美團這個平臺上選擇你喜歡的菜品,在這個平臺上面集中了很多商家的特色食品,冷盤、熱菜及特色菜應用盡有。你點過餐了以後,你只需要等待外賣小哥把訂餐送到你的手中就可以了。然而,外賣小哥接單後,需要到指定的餐館購買指定的食品,如我點了一家“黃燜雞”主題店的“大份黃燜雞米飯”,外賣小哥就要到指定的“黃燜雞”主題店購買到指定的“大份黃燜雞米飯”後,馬不停蹄地來到顧客面前來送餐,外賣小哥接單的時候,有的是攜帶著顧客的要求,“不吃辣,不吃香菜”等要求,回來送到顧客手中的時候,一定是一碗大份的黃燜雞米飯。具體流程如下圖所示。


flask程式設計程式的思路與我們日常點餐的流程是一致的。這裡的Flask程式就可以理解成點餐平臺,在點餐平臺上有很多的菜品,在實現python程式時,呼叫主程式會使name==”main”語句,這表明name中不光只有main,可能還有其它程序,只有name的程序名稱是main時,才會觸發主程式的執行。那麼name中的名字就可以形象地理解成各中特色的選單,Flask平臺中把name包裹起來,就相當於把選單上傳到到點餐平臺中。然後點餐平臺就可以呼叫外賣小哥對客戶的點餐進行接單和跑單。程式碼如下。

#導包
from flask import Flask
#相當於把選單整合到平臺中
app=Flask(__name__,template_folder="myfolder")
#呼叫主程式
if __name__=="__main__":
#相當於app理解成外賣小哥,代替本人去購餐送餐
app.run()
目前,上面的程式碼沒有實現點餐,只有點過餐了,外賣小哥才會有目地性的去跑,現在相當於的哥沒有乘客時的瞎轉,一直在尋找著乘客,程式碼中沒有指定具體點餐內容的flask就相當於外賣小哥沒有接單時,在漫無目的的等待。只有客戶有新的訂單,外賣小哥接到單後,就會到指定的地點購餐,然後把購得的餐再返回給客戶。點餐的實現就是限定了外賣小哥只能到指定的地點進行購買指定的餐飲,不然客戶是不能接受付款的。Python需要一個技術實現特定條件限定的方法,即滿足只有黃燜雞店才能購買的黃燜雞米飯。實現這個技術的方法在Python中使用裝飾器即可以做到,裝飾器可以實現滿足一定函式要求的內容才能訪問這個頁面。如訪問百度頁面,只有滿足輸入“www.baidu.com”這樣的網址才能訪問百度頁面。因此,裝飾器的技術只需限定只有某個地址才能訪問相關的頁面,其他的地址是不能訪問此頁面的。flask中提供的路由技術實現了這樣的需求。這樣,透過@app.route指定具體的地址去做什麼樣的事情就可以了。@app.route就是修飾def方法的路由。在def修飾的方法中必須返回內容相當於返回的餐飲,如是程式設計師中最精典的程式“Hello World”,“你好,世界”展現了程式設計師擁抱世界的態度。