作風(fēng)建設(shè)網(wǎng)站海曙seo關(guān)鍵詞優(yōu)化方案
前言
課程地址:Python Web 框架 Flask 快速入門
文章目錄
- 前言
- 🌴 Flask基礎(chǔ)和模板
- 🌷 一個(gè)簡單的flask程序
- 🌼 模板的使用
🌴 Flask基礎(chǔ)和模板
1、web框架的作用
避免重復(fù)造輪子,app程序不必關(guān)心于服務(wù)器的溝通方式,而專注于核心的業(yè)務(wù)邏輯實(shí)現(xiàn)。
- 穩(wěn)定,可擴(kuò)展性強(qiáng)
- 開發(fā)效率高
flask是一個(gè)輕量級(jí)的Web開發(fā)框架,python常見的web開發(fā)框架還有Django、Tornado。但輕量不等于弱,因?yàn)榭梢砸敫鞣N擴(kuò)展,就像python可以安裝各種庫一樣。
2、安裝flask庫
pip install flask
🌷 一個(gè)簡單的flask程序
程序代碼:
# 1. 導(dǎo)入Flask擴(kuò)展
from flask import Flask, render_template# 2. 創(chuàng)建Flask應(yīng)用程序示例
# 需傳入__name__,作用是為了確定資源所在路徑
app = Flask(__name__)# 3. 定義路由及視圖函數(shù)
# Flask中定義路由是通過裝飾器實(shí)現(xiàn)
@app.route('/', methods=['GET', 'POST'])
def hello_world():return '<h1>Hello, flask!</h1>'# 使用同一個(gè)視圖函數(shù),來顯示不同用戶的訂單信息
# <>定義路由的參數(shù)
@app.route('/orders/<int:order_id>')
def get_order_id(order_id):# 需要在視圖函數(shù)的()內(nèi)填入?yún)?shù)名,后面的代碼才能去使用# 有時(shí),需要對路由做訪問優(yōu)化,訂單ID應(yīng)該是int類型return '<h2>order_id %s</h2>' % order_id# 4. -- main --
# 會(huì)將Flask程序運(yùn)行在一個(gè)簡易服務(wù)器上(Flask提供,用于測試)
app.run()
這個(gè)程序的
hello_world()
實(shí)現(xiàn)了對根目錄請求的響應(yīng),此時(shí)程序就只有一個(gè)固定的響應(yīng)方式。
下面的get_order_id
實(shí)現(xiàn)了對路徑/orders/...
的響應(yīng),<int:order_id>
表示url的這一部分將被解析為一個(gè)參數(shù)數(shù)據(jù)傳入(url不用?order_id=1
這種寫法,也可以傳遞參數(shù),而這取決于程序?qū)rl的解析方法)。
可以使用Edge的Postwoman插件對請求進(jìn)行測試,
對根目錄的請求時(shí),返回
<h1>Hello, flask!</h1>
對/orders/666
目錄發(fā)送請求時(shí),返回
<h2>order_id 666</h2>
當(dāng)請求不符合規(guī)定時(shí),就會(huì)返回錯(cuò)誤,例如代碼中<int:order_id>
要求了order_id只能是一個(gè)整數(shù),當(dāng)url使用http://127.0.0.1:5000/orders/a
時(shí),返回
<!doctype html>
<html lang=en>
<title>404 Not Found</title>
<h1>Not Found</h1>
<p>The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.</p>
🌼 模板的使用
flask庫中有一個(gè)內(nèi)置的模板引擎,叫做Jinjia2。
為什么用模板引擎?
我們不希望Server僅返回一個(gè)字符串,而是返回一整個(gè)網(wǎng)頁。而且不應(yīng)該只能返回寫死的網(wǎng)頁,而要可以動(dòng)態(tài)地填充數(shù)據(jù)。一個(gè)可以填充數(shù)據(jù)的網(wǎng)頁,就可以成為“模板”。
使用flask模板時(shí)的目錄結(jié)構(gòu):
flask_template_demo.py
templates
- index.html
flask的render_template會(huì)自動(dòng)在templates目錄下找html文件,所以我們的html需要放在該目錄下。
html中的代碼塊
-
變量代碼塊
{{ 變量名 }}
-
控制代碼塊
有if、else、for,例如:
{{% for %}}... {{% endfor %}}
render_template
將寫好的html文件(模板網(wǎng)頁),和變量,都作為參數(shù)傳遞給
render_template()
,它就會(huì)將變量填充(填充方式在html中實(shí)現(xiàn))到模板中,形成最終的網(wǎng)頁,最后返回。
index.html文件代碼
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>Title</title></title></head><body>這是模板<br>這是首頁<br>{{url_str}}<br><!-- 列表的使用 -->{{my_list}}<br>{{ my_list[1] }}<br>{{ my_list.3 }}<br><!-- 字典的使用 -->{{my_dict}}<br>{{my_dict.url}}<br>{{my_dict['name']}}<br><hr><!-- for循環(huán)的使用 -->{% for num in my_list %}{% if num > 3 %}{{num}}<br>{% endif %}{% endfor %}<hr><!-- 過濾器使用 --><!-- 字符串變大寫 -->{{ url_str | upper}}<br><!-- 字符串反轉(zhuǎn) -->{{ url_str | reverse}}<br><!-- 大寫后反轉(zhuǎn) -->{{ url_str | upper | reverse}}<br></body>
</html>
flask_template_demo.py文件代碼
from flask import Flask, render_templateapp = Flask(__name__)# 1. 如何返回一個(gè)網(wǎng)頁(模板)
# 2. 如何給模板填充數(shù)據(jù)
@app.route('/')
def index():# 準(zhǔn)備轉(zhuǎn)入到網(wǎng)頁模板中的變量url_str = 'www.baidu.com'my_list = [1, 3, 5, 7, 9]my_dict = {'name': '程序員','url': 'www.baidu.com'}# 通常模板中使用的變量名,和傳入的變量名保持一致return render_template('index.html', url_str=url_str, my_list=my_list, my_dict=my_dict)# 運(yùn)行程序
app.run(debug=True)
程序運(yùn)行效果
網(wǎng)頁上渲染顯示:
也可以看看返回的源代碼。