一、什麼是Flask
Flask是一個輕量級、開源的Python Web框架,基於Werkzeug工具箱和Jinja2模板引擎,它的設計目標是簡單、靈活的,適用於小型應用和個人項目。
相較於其他Python Web框架,Flask的特點是代碼簡潔、易學易用,沒有過多的依賴和默認配置,可以輕鬆地進行擴展和定製。
Flask的主要特色:
- 微型框架,只提供了最基本的功能
- 靈活的擴展機制
- 可定製性強
- 支持多種數據庫
- 有豐富的社區資源
二、Flask的基本使用
搭建環境
在開始使用Flask前,需要先安裝相應的依賴包。可以使用下面的命令:
pip install Flask
安裝完成後,在Python的交互式環境中嘗試一下import,如果沒有報錯,則說明安裝成功。
編寫Hello World應用
下面我們來嘗試編寫一個最簡單的Flask應用,輸出“Hello World”。在項目根目錄下創建一個Python文件app.py:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
if __name__ == '__main__':
app.run()
- 首先引入Flask模塊,然後實例化Flask類
- @app.route(‘/’)是一個裝飾器,用於綁定URL和視圖函數
- def hello_world()是一個簡單的視圖函數,返回’Hello, World!’字符串
- 最後判斷是否為主模塊,然後執行app.run()
在終端中執行以下命令,啟動Flask應用:
FLASK_APP=app.py flask run
此時可以在瀏覽器中訪問http://127.0.0.1:5000/ ,可以看到輸出了“Hello, World!”
三、Flask的路由定義
參數傳遞
路由規則中可以指定參數,參數的格式為“<param_type:param_name>”,其中param_type表示參數類型,例如int、float、path等,param_name表示參數名稱。在函數中,可以通過argement獲取參數值。
from flask import Flask
app = Flask(__name__)
@app.route('/user/')
def show_user_profile(user_id):
return 'User %d' % user_id
if __name__ == '__main__':
app.run()
上述代碼中指定路由規則為/user/<int:user_id>,其中user_id是int類型。在函數中直接使用user_id參數,訪問http://127.0.0.1:5000/user/123 可以看到輸出了“User 123”。
HTTP方法
Flask默認只支持GET方法,可以使用methods參數指定支持哪些HTTP方法。
from flask import Flask, request
app = Flask(__name__)
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
# 驗證用戶名和密碼
return 'Login Success!'
else:
return 'Please Login!'
if __name__ == '__main__':
app.run()
上述代碼中,指定路由規則為/login,支持GET和POST方法。如果是POST方法,取出表單中的username和password進行驗證,否則返回“Please Login!”
四、使用模板引擎
模板引擎的概念
模板引擎是一種用於生成動態HTML頁面的工具,通常會帶有一些控制流程、條件語句和變量等基本功能。在Flask中,常用的模板引擎包括Jinja2和Mako等。
Jinja2的使用
Jinja2是一個基於Python的模板引擎,可以非常方便地和Flask集成。Jinja2的語法簡單易懂,非常適合用於構建HTML和XML等動態頁面。
首先需要在項目目錄下創建一個templates目錄,用於存放模板文件。下面是一個簡單的模板文件login.html,用於展示一個用戶登錄界面:
<html>
<head>
<title>Login</title>
</head>
<body>
<form method="post" action="/login">
<label>Username:</label><br/>
<input type="text" name="username" /><br/>
<label>Password:</label><br/>
<input type="password" name="password" /><br/>
<input type="submit" value="Login" /><br/>
</form>
</body>
</html>
在Flask應用中,需要引入render_template方法,然後通過它輸出模板頁面。
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
# 驗證用戶名和密碼
return 'Login Success!'
else:
return render_template('login.html')
if __name__ == '__main__':
app.run()
上述代碼中,當請求為GET方法時,使用render_template方法輸出login模板頁面。當請求為POST方法時,進行登錄驗證。
五、使用數據庫
ORM介紹
ORM(Object Relational Mapping)是一種面向對象編程語言中,用於實現關係數據庫數據與對象之間轉換的技術。ORM框架屏蔽了底層數據庫的具體實現細節,使得使用者可以更加專註於業務邏輯和程序設計,降低了開發難度和維護成本。
SQLAlchemy的使用
SQLAlchemy是一個基於Python的ORM框架,封裝了Python和多種數據庫之間的底層API,可以輕鬆實現數據庫的增刪改查等基本操作。在Flask中,常用的使用第三方擴展Flask-SQLAlchemy來集成。
首先需要安裝Flask-SQLAlchemy:
pip install flask_sqlalchemy
下面是一個簡單的數據庫模型,用於表示用戶信息:
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime
db = SQLAlchemy()
class User(db.Model):
__tablename__ = 'users'
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(255), nullable=False)
password = db.Column(db.String(255), nullable=False)
created_at = db.Column(db.DateTime, default=datetime.now)
def __repr__(self):
return '' % self.username
在主應用中,需要初始化db對象,然後註冊對應的路由,使用db對象進行數據庫操作。
from flask import Flask, request, render_template
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
db = SQLAlchemy(app)
# 用戶登錄
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
username = request.form['username']
password = request.form['password']
# 驗證用戶名和密碼,這裡假設驗證成功
# 將用戶名保存到數據庫中
user = User(username=username, password=password)
db.session.add(user)
db.session.commit()
return 'Login Success!'
else:
return render_template('login.html')
if __name__ == '__main__':
app.run()
上述代碼中,首先指定了數據庫URI為sqlite格式。在登錄函數中,如果驗證通過,則將用戶名和密碼保存到數據庫中。
六、擴展和定製Flask
Flask擴展介紹
Flask自身功能比較簡潔,可以通過第三方的Flask擴展來實現更多的功能。Flask擴展通常包含一組函數和類,用於擴展Flask的功能,例如發送郵件、上傳文件、緩存等。
Flask郵件擴展
Flask-Mail是一個常用的郵件擴展,用於發送和接收郵件。首先需要安裝Flask-Mail:
pip install Flask-Mail
下面是使用Flask-Mail發送郵件的示例代碼:
from flask_mail import Mail, Message
from flask import Flask
app = Flask(__name__)
app.config['MAIL_SERVER'] = 'smtp.qq.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USE_SSL'] = True
app.config['MAIL_USERNAME'] = 'yourname@qq.com'
app.config['MAIL_PASSWORD'] = 'yourpassword'
mail = Mail(app)
@app.route('/')
def index():
msg = Message('Hello', sender='yourname@qq.com', recipients=['recipient@example.com'])
msg.body = "Hello Flask!"
mail.send(msg)
return 'Mail sent successfully!'
if __name__ == '__main__':
app.run()
在Flask應用中,需要初始化Mail對象,然後定義路由函數發送郵件。
七、總結
在這篇文章中,我們對Flask進行了全面的介紹。從基本使用到路由定義、模板引擎和數據庫的使用,再到Flask的擴展和定製,都進行了詳細的闡述。通過學習Flask的使用,可以構建出輕巧、高效的Web應用。
原創文章,作者:DNGK,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/146150.html