日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【Python】Flask框架系列(一):安装、页面跳转/重定向、模板、逻辑语句、过滤器、继承/使用block、url链接/加载静态资源

發布時間:2024/2/28 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Python】Flask框架系列(一):安装、页面跳转/重定向、模板、逻辑语句、过滤器、继承/使用block、url链接/加载静态资源 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從下載安裝開始的所有筆記。

其實 Flask 的示例程序算是 MVC 模式的. Model 是 ORM, V 是 Template, C 是 url route 和 request handler.


JSON數據格式



安裝虛擬環境

activate是激活虛擬環境。deactivate是退出虛擬環境。

(venv) C:\Users\Bug\PycharmProjects\FirstProj>pip install virtualenv (venv) C:\>mkdir Virtualenv (venv) C:\Virtualenv>virtualenv flask-env (venv) C:\Virtualenv\flask-env\Scripts>activate (flask-env) C:\Virtualenv\flask-env\Scripts>

在虛擬環境中安裝flask

(flask-env) C:\Virtualenv\flask-env\Scripts>pip install flask (flask-env) C:\Virtualenv\flask-env\Scripts>python >>> import flask >>> print(flask.__version__) 1.1.1 >>> exit()

新建py項目的時候,配置一下Interpreter:"C:\Virtualenv\flask-env\Scripts\python.exe"


參考了視頻教程:網易云課堂
因為社區版的pycharm不能新建Flask項目,因此下載了Professional版本并破解安裝(方式自行百度)。
我使用的py版本是2.7。
環境配置折騰了一上午。兩個原因:
1、pycharm社區版更換為專業版
2、python3更換為python2.7
在版本更換的過程中,裝來裝去好像把虛擬環境搞壞了,報錯找不到traceback之類的。又重新按著上面的命令裝了一遍環境,就好了。

最終成功建立項目:testflask3
默認生成代碼:

使用py2需要設置編碼(默認ascii,需要改成utf-8),py3不需要設置。

#encoding: utf-8from flask import Flaskapp = Flask(__name__)@app.route('/') def hello_world():return 'Hello World!'if __name__ == '__main__':app.run()

右鍵運行,控制臺輸出如下,點擊url即可看到helloworld

* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

代碼含義詳解:


debug模式的設置


設置開啟debug模式,可以在瀏覽器端顯示完整的異常traceback棧,并且在每次更新保存的時候達到熱部署的效果。

另一種配置debug的方式:使用config文件
新建一個py文件,如下

使用配置文件的方式設置參數,以后也會用到。方式為在原有的py中添加一行:

小結


獲取url請求參數


示例代碼

# encoding: utf-8from flask import Flaskapp = Flask(__name__)@app.route('/') def hello_world():return '<h1>Hello World!</h1>我dddde第一個flask程序'@app.route('/article/<id>') def article(id):return u'您請求的參數是:%s' % idif __name__ == '__main__':app.run(debug=True)

小結


反轉url url_for()

url_for操作對象是函數,而不是route里的路徑。
如果route和函數名不一樣而導致使用url_for()錯誤,千萬不要去route找錯誤。

url_for()函數是用于構建指定函數的URL。

一般我們通過一個URL就可以執行到某一個函數。
如果反過來,我們知道一個函數,怎么去獲得這個URL呢?
url_for函數就可以幫我們實現這個功能。

url_for()函數接收兩個及以上的參數,他接收函數名作為第一個參數,接收對應URL規則的命名參數,如果還出現其他的參數,則會添加到URL的后面作為查詢參數。

通過構建URL的方式而選擇直接在代碼中拼URL的原因有兩點:

將來如果修改了URL,但沒有修改該URL對應的函數名,就不用到處去替換URL了。
url_for()函數會轉義特殊字符和Unocode數據,這些工作都不需要我們自己處理。

示例

訪問頁面結果:

控制臺輸出:

* Detected change in 'C:\\Users\\Bug\\PycharmProjects\\testflask3\\app.py', reloading* Restarting with stat* Debugger is active!* Debugger PIN: 300-662-218* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) /list/ /article/abc 127.0.0.1 - - [29/Sep/2019 14:41:55] "GET / HTTP/1.1" 200 -

源碼

# encoding: utf-8from flask import Flask, url_forapp = Flask(__name__)@app.route('/') def index():print url_for('my_list')print url_for('article',id='abc')return '<h1>Hello World!</h1>'@app.route('/list/') def my_list():return 'list'@app.route('/article/<id>') def article(id):return u'您請求的id是:%s' % idif __name__ == '__main__':app.run(debug=True)

實際應用舉例


頁面跳轉和重定向


示例:使用http://127.0.0.1:5000/question/0代表未登錄
使用http://127.0.0.1:5000/question/1代表已登錄
如果未登錄,則重定向到登錄頁面
如果已登錄,則進入question問答頁面


源碼

# encoding: utf-8from flask import Flask, redirect, url_forapp = Flask(__name__)@app.route('/') def index():login_url = url_for('my_login') # 這里填寫視圖函數名return '這是首頁'@app.route('/login') def my_login():return '這是登錄頁面'@app.route('/question/<flag>') def my_question(flag):if flag == '0':return redirect(url_for('my_login'))else:return '(已登錄)這是發布問答頁面'if __name__ == '__main__':app.run(debug=True)

render_template模板文件

項目結構

index.html

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>首頁</title> </head> <body><p>你好,{{ username }},您已進入:至尊歡迎頁面</p><p>id:{{ id }}</p><p>username:{{ username }}</p><p>sex:{{ sex }}</p><p>age:{{ age }}</p> </body> </html>

后臺傳參方式一:相當于鍵值對,這樣的缺點是參數過多時不易維護

# encoding: utf-8from flask import Flask, redirect, url_for, render_templateapp = Flask(__name__)@app.route('/') def index():return render_template('index.html', username=u'張三', sex=u'不男不女')if __name__ == '__main__':app.run(debug=True)

后臺傳參方式二:使用字典,再打散

# encoding: utf-8from flask import Flask, redirect, url_for, render_templateapp = Flask(__name__)@app.route('/') def index():context = {'id': 23456,'username': u'張三','sex': u'不男不女','age': 26}return render_template('index.html', **context)if __name__ == '__main__':app.run(debug=True)


小結


if判斷


示例

使用.../0表示未登錄,使用.../1表示已登錄,并且限制年齡>18


index.html

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>首頁</title> </head> <body>{% if user and user.age > 18 %}<p>年齡:{{ user.age }}</p><a href="#">{{ user.name }}</a><a href="#">注銷</a>{% else %}<a href="#">登錄</a><a href="#">注冊</a>{% endif %} </body> </html>

app.py

# encoding: utf-8from flask import Flask, redirect, url_for, render_templateapp = Flask(__name__)@app.route('/<flag>') def index(flag):if flag == '1':user = {'username': u'張三','age': 23,}return render_template('index.html', user=user)else:return render_template('index.html')if __name__ == '__main__':app.run(debug=True)

字典的使用+flask中的for循環


1、使用python遍歷一個字典

2、使用flask遍歷一個字典

3、普通的列表遍歷
(python后臺)

(前端html)

示例:四大名著
(后臺)


(前端)


過濾器



示例:如果用戶沒有設定頭像,則使用默認頭像
(后端)

(前端)

顯示效果:


繼承和使用block

1、python中普通的繼承

(繼承-例1)

(繼承-例2)

2、前端頁面

使用繼承:公共模板放在父html(base.html)中

3、為了在子html中繼承父html的同時,添加自己的內容,需要在父html留一個block接口
(前端-父模板)

(前端-子模板)
注意:如果要在子模板中實現一些內容,必須寫在接口block中,不能寫在block塊外面(接口外面的內容不會被顯示或渲染)
可以定義多個不同名稱的block塊。

運行效果

小結


url鏈接和加載靜態文件



flask中加載外部css文件鏈接、js鏈接、圖片鏈接的方式如下(在服務器上運行時,不能使用普通的url加載方式)

小結

總結

以上是生活随笔為你收集整理的【Python】Flask框架系列(一):安装、页面跳转/重定向、模板、逻辑语句、过滤器、继承/使用block、url链接/加载静态资源的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。