【Python】Flask框架系列(一):安装、页面跳转/重定向、模板、逻辑语句、过滤器、继承/使用block、url链接/加载静态资源
從下載安裝開始的所有筆記。
其實(shí) Flask 的示例程序算是 MVC 模式的. Model 是 ORM, V 是 Template, C 是 url route 和 request handler.
JSON數(shù)據(jù)格式
 
安裝虛擬環(huán)境
activate是激活虛擬環(huán)境。deactivate是退出虛擬環(huán)境。
(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>在虛擬環(huán)境中安裝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項(xiàng)目的時候,配置一下Interpreter:"C:\Virtualenv\flask-env\Scripts\python.exe"
參考了視頻教程:網(wǎng)易云課堂
 因?yàn)樯鐓^(qū)版的pycharm不能新建Flask項(xiàng)目,因此下載了Professional版本并破解安裝(方式自行百度)。
 我使用的py版本是2.7。
 環(huán)境配置折騰了一上午。兩個原因:
 1、pycharm社區(qū)版更換為專業(yè)版
 2、python3更換為python2.7
 在版本更換的過程中,裝來裝去好像把虛擬環(huán)境搞壞了,報錯找不到traceback之類的。又重新按著上面的命令裝了一遍環(huán)境,就好了。
 
 最終成功建立項(xiàng)目:testflask3
 默認(rèn)生成代碼:
 
 使用py2需要設(shè)置編碼(默認(rèn)ascii,需要改成utf-8),py3不需要設(shè)置。
右鍵運(yùn)行,控制臺輸出如下,點(diǎn)擊url即可看到helloworld
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)代碼含義詳解:
 
 
debug模式的設(shè)置
 設(shè)置開啟debug模式,可以在瀏覽器端顯示完整的異常traceback棧,并且在每次更新保存的時候達(dá)到熱部署的效果。
 
 另一種配置debug的方式:使用config文件
 新建一個py文件,如下
 
 使用配置文件的方式設(shè)置參數(shù),以后也會用到。方式為在原有的py中添加一行:
 
 小結(jié)
獲取url請求參數(shù)
 示例代碼
小結(jié)
 
反轉(zhuǎn)url url_for()
url_for操作對象是函數(shù),而不是route里的路徑。
 如果route和函數(shù)名不一樣而導(dǎo)致使用url_for()錯誤,千萬不要去route找錯誤。
url_for()函數(shù)是用于構(gòu)建指定函數(shù)的URL。
一般我們通過一個URL就可以執(zhí)行到某一個函數(shù)。
 如果反過來,我們知道一個函數(shù),怎么去獲得這個URL呢?
 url_for函數(shù)就可以幫我們實(shí)現(xiàn)這個功能。
url_for()函數(shù)接收兩個及以上的參數(shù),他接收函數(shù)名作為第一個參數(shù),接收對應(yīng)URL規(guī)則的命名參數(shù),如果還出現(xiàn)其他的參數(shù),則會添加到URL的后面作為查詢參數(shù)。
通過構(gòu)建URL的方式而選擇直接在代碼中拼URL的原因有兩點(diǎn):
將來如果修改了URL,但沒有修改該URL對應(yīng)的函數(shù)名,就不用到處去替換URL了。
 url_for()函數(shù)會轉(zhuǎn)義特殊字符和Unocode數(shù)據(jù),這些工作都不需要我們自己處理。
 
 示例
訪問頁面結(jié)果:
 
 控制臺輸出:
源碼
# 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)實(shí)際應(yīng)用舉例
 
頁面跳轉(zhuǎn)和重定向
 示例:使用http://127.0.0.1:5000/question/0代表未登錄
 使用http://127.0.0.1:5000/question/1代表已登錄
 如果未登錄,則重定向到登錄頁面
 如果已登錄,則進(jìn)入question問答頁面
 
 
 源碼
render_template模板文件
項(xiàng)目結(jié)構(gòu)
 
 index.html
后臺傳參方式一:相當(dāng)于鍵值對,這樣的缺點(diǎn)是參數(shù)過多時不易維護(hù)
# 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)
 小結(jié)
 
if判斷
 示例
使用.../0表示未登錄,使用.../1表示已登錄,并且限制年齡>18
 
 
 index.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循環(huán)
 1、使用python遍歷一個字典
 
 2、使用flask遍歷一個字典
 
3、普通的列表遍歷
 (python后臺)
 
 (前端html)
 
示例:四大名著
 (后臺)
 
 
 (前端)
 
過濾器
 
 示例:如果用戶沒有設(shè)定頭像,則使用默認(rèn)頭像
 (后端)
 
 (前端)
 
 顯示效果:
 
繼承和使用block
1、python中普通的繼承
(繼承-例1)
 
 (繼承-例2)
 
 2、前端頁面
 
 
使用繼承:公共模板放在父html(base.html)中
 
3、為了在子html中繼承父html的同時,添加自己的內(nèi)容,需要在父html留一個block接口
 (前端-父模板)
 
 (前端-子模板)
 注意:如果要在子模板中實(shí)現(xiàn)一些內(nèi)容,必須寫在接口block中,不能寫在block塊外面(接口外面的內(nèi)容不會被顯示或渲染)
 可以定義多個不同名稱的block塊。
 
 運(yùn)行效果
 
 小結(jié)
 
url鏈接和加載靜態(tài)文件
 
 flask中加載外部css文件鏈接、js鏈接、圖片鏈接的方式如下(在服務(wù)器上運(yùn)行時,不能使用普通的url加載方式)
 
 小結(jié)
 
總結(jié)
以上是生活随笔為你收集整理的【Python】Flask框架系列(一):安装、页面跳转/重定向、模板、逻辑语句、过滤器、继承/使用block、url链接/加载静态资源的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 【python】python第二周作业
- 下一篇: 【JavaScript】Document
