【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不需要設置。
右鍵運行,控制臺輸出如下,點擊url即可看到helloworld
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)代碼含義詳解:
debug模式的設置
設置開啟debug模式,可以在瀏覽器端顯示完整的異常traceback棧,并且在每次更新保存的時候達到熱部署的效果。
另一種配置debug的方式:使用config文件
新建一個py文件,如下
使用配置文件的方式設置參數,以后也會用到。方式為在原有的py中添加一行:
小結
獲取url請求參數
示例代碼
小結
反轉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數據,這些工作都不需要我們自己處理。
示例
訪問頁面結果:
控制臺輸出:
源碼
# 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問答頁面
源碼
render_template模板文件
項目結構
index.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
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链接/加载静态资源的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【python】python第二周作业
- 下一篇: 【Python】Flask框架系列(二)