一、開發環境與準備
在使用 Flask 進行Web開發前,首先需要安裝 Python 環境。 Python 是非常容易學習的一門編程語言,大量的資料和社區可以支持開發過程中的問題解決。
安裝 Flask 可以使用 pip 安裝:
pip install Flask
Flask 還需要安裝其他插件(extensions)來增強它的功能。例如,Jinja2 用於模板引擎;Werkzeug 用於 HTTP 請求。
pip install Jinja2
pip install Werkzeug
二、路由與視圖函數
Flask 的路由系統是其最重要的特性之一,路由系統負責讓 Web應用響應 HTTP 請求。Flask 使用路由裝飾器指定了一個視圖函數來處理請求。
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello World!'
if __name__ == '__main__':
app.run()
這裡定義了一個 simple 的路由,用於處理根路徑 (“/”) 的請求,這個函數將返回一個字符串響應(”Hello World!”)。現在你可以訪問 http://localhost:5000/ 來查看結果了!
三、模板引擎和模板
模板引擎可以極大地提高 Python web 應用的靈活性。 Flask 默認使用 Jinja2 這個流行的模板引擎。模板是一個帶有擴展名的文件,其中包含靜態文本和特定的動態部分,這些動態部分被稱作變量,在使用時需要渲染這些變量。
在 Flask 應用中,可以使用 render_template
函數加載模板文件。下面是一個簡單的例子:
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html', title='Homepage')
if __name__ == '__main__':
app.run()
這個例子定義了一個路由,當訪問根路徑時,將渲染 index.html 模板。在這個模板中,{{ title }}
是一個變量,可以在渲染時提供它的值。
四、表單
實際 Web 應用很少不涉及任何用戶交互,其中表單是最常用、最基本的一種交互方式。在 Flask 中,表單的處理由 WTForms 提供支持。
WTForms 是一個靈活且易於使用的表單處理庫,可以處理大多數 Web 應用程序需要的表單處理需求。 Flask-WTF 提供了一個集成到 Flask 應用程序中的 WTForms 擴展。
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
class NameForm(FlaskForm):
name = StringField('What is your name?', validators=[DataRequired()])
submit = SubmitField('Submit')
來看看這個例子。我們新建了一個 NameForm 類,繼承與 FlaskForm 類。 StringField 對象表示一個文本字段,SubmitField 對象表示提交按鈕。validators 參數是可選的,用於驗證輸入。
在實際視圖函數中處理表單需要用到一些套路,代碼如下:
from flask import Flask, render_template, session, redirect, url_for
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired
app = Flask(__name__)
app.config['SECRET_KEY'] = 'mysecretkey'
class NameForm(FlaskForm):
name = StringField('What is your name?', validators=[DataRequired()])
submit = SubmitField('Submit')
@app.route('/', methods=['GET', 'POST'])
def index():
form = NameForm()
if form.validate_on_submit():
session['name'] = form.name.data
return redirect(url_for('index'))
return render_template('index.html', form=form, name=session.get('name'))
if __name__ == '__main__':
app.run()
這個例子定義了一個新的路由,當它被訪問時,它會展示一個表單並處理它。 validate_on_submit
方法處理 POST 請求。參數和例子代碼的名稱相符。如果表單驗證通過,將會把 form.name.data 保存到 Flask 的 session 中。最後重定向回根頁面(這聽起來平庸卻是一種常見的技巧,可以保證在刷新頁面時,POST 請求不會被重複提交)。
五、數據庫
Flask 為不同的數據庫(如 MySQL、PostgreSQL 或 SQLite)提供了數據庫驅動程序的支持。可以根據需要選擇適當的擴展來連接到所需的數據庫。
例如:使用 SQLAlchmey(一個 Python 全棧數據工具鏈)操作 SQLite 數據庫的示例代碼:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=False, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return f"\<User {self.username}\>"
@app.route('/')
def index():
db.create_all()
user = User(username='John', email='john@example.com')
db.session.add(user)
db.session.commit()
return 'Hello, World! The first user is added'
if __name__ == '__main__':
app.run()
在這個示例中,定義了一個 User 模型,在其中指定了表中各列的詳細信息。這個模型繼承自 SQLAlchemy 的 Model 類,要指定主鍵,只需要設置 primary_key=True
。我們的數據庫地址:sqlite:///database.db,然後程序會自動創建表,並插入一條數據。
六、Docker 化
Docker 是一個應用程序容器引擎,用於輕鬆的開發、部署和運行虛擬化應用程序。它可以輕鬆的管理應用程序的依賴性和各種環境。讓我們看看如何使用 Docker 部署 Flask 應用程序。
首先,在項目根目錄下,創建一個 Dockerfile
文件:
FROM python:3.8-alpine
WORKDIR /app
COPY . .
RUN apk add --no-cache gcc musl-dev linux-headers
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
EXPOSE 5000
ENTRYPOINT ["python", "app.py"]
這個 Dockerfile 安裝了 Python 3.8 的 Alpine Linux 版本(一個基於輕量級的 Linux 系統),然後在 /app 目錄下複製工程文件。接下來,安裝我們的依賴和將程序運行時所需要的依賴包打進一個單獨的 tar 包里,以便在任何地方安裝這些包。最後,將 5000 端口暴露並指定程序入口點。
最後,使用以下命令可以成功啟動 Docker 鏡像:
docker build -t flask .
docker run -d -p 5000:5000 flask
運行後訪問 http://127.0.0.1:5000 即可。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/242348.html