虛擬環境
- 使用pipenv創建一個虛擬環境和項目綁定,安裝:
E:\py\qiyue\flask>python3 -m pip install pipenv
- 和項目綁定:到項目的目錄中
pipenv install
,然后pipenv shell
,就進入到了虛擬環境中了,然后就可以安裝各種包了,比如pipenv install flask
,
- 常見的pipenv命令,退出
exit
,進入pipenv shell
,安裝pipenv install 包名
,卸載pipenv uninstall 包名
,查看安裝包的依賴關系pipenv graph
,
- 與pycharm綁定,在虛擬環境中
pipenv --venv
,就會顯示一個對應的目錄,然后在pycharm中選擇環境時綁定一下就可以了,這樣運行的就是這個虛擬環境了
flask最小原型與唯一URL原則
- flaks的最小原型,此時訪問
http://127.0.0.1:5000/hello
就可以看到return的值了
# -*- coding: utf-8 -*-
from flask import Flask
# 實例化
app = Flask(__name__)
@app.route('/hello')
def hello():
return 'hello'
app.run()
- 唯一URL原則,此時若用戶訪問
http://127.0.0.1:5000/hello/
網址,因為多了一個斜杠,那么這個頁面就找不到,若此時@app.route('/hello/')
這里多個一個斜杠,就可以訪問了,
- 但是此時訪問不帶斜杠的也是可以的,那時因為flask底層做了一次重定向
路由的另一種注冊方法
- 因為每一次修改完代碼還的重啟服務器才能看見效果,所以這個時候開啟debug模式就可以了,在
app.run(debug=True)
添加就行了,這樣就方便多了
- 路由的另一種注冊方法,使用app調用
add_url_rule()
方法就可以了
# -*- coding: utf-8 -*-
from flask import Flask
# 實例化
app = Flask(__name__)
def hello():
return 'hello'
# 路徑,視圖函數
app.add_url_rule('/hello',view_func=hello)
app.run(debug=True)
- 但是通常的情況下還是使用裝飾器就可以了
app.run相關參數與flask配置文件
- 此時的
app.run(debug=True)
這個情況下,只有通過127.0.0.1:5000
才能訪問,即使輸入本機ip也不能訪問,所以這個時候可以在這個方法中添加參數,此時在地址欄中輸入http://192.168.2.14:81/hello
也是可以訪問的
# host:指定ip地址,輸入本機ip也可以訪問了,port是改變默認的端口
app.run(host='0.0.0.0',debug=True,port=81)
- 若項目上線的話,此時debug模式就不能開啟,因為要保持源代碼的一致性,所以此時盡量不能刪除這個debug,這個時候寫一個配置文件,在目錄中新建一個config.py
# -*- coding: utf-8 -*-
DEBUG = True
- 這個時候在文件中, 先載入這個文件,然后進行讀取,注意參數要大寫
# -*- coding: utf-8 -*-
from flask import Flask
app = Flask(__name__)
# 載入這個配置文件,這里要注意路徑,
app.config.from_object('config')
@app.route('/hello')
def hello():
return 'hello'
# 讀取配置文件中信息
app.run(host='0.0.0.0',debug=app.config['DEBUG'],port=81)
if name 的作用
- 有這個判斷的話,只有這個文件作為入口文件的情況下,這個run才會執行
if __name__ == '__main__':
app.run(host='0.0.0.0',debug=app.config['DEBUG'],port=81)
- 生成環境下通常不會使用flask自帶的服務器,而是使用
nginx+uwsgi
,此時這個文件就不是入口文件了,這個時候uwsgi也是一個服務器,若沒有加判斷就會同時有兩個服務器了,所以這個加上判斷是必要的
Response
- 視圖函數返回的其實就是一個Response,若這樣寫,此時頁面上什么也沒有,默認的
content-type = text/html
@app.route('/hello')
def hello():
return '<html></html>'
- 返回的有這么幾個重要的參數
status code
,content-type
,也可以自定義,此時返回的<html></html>
,因為使用的文本解析,當然了還可以返回json application/json
from flask import Flask,make_response
@app.route('/hello')
def hello():
# status code 200,404,301,狀態碼只是一個標識
# content-type http headers,指定了客戶端在接收到數據后用什么方式進行解析
# content-type = text/html 默認的
# Response對象
headers = {
'content-type':'text/plain',#文本解析
}
response = make_response('<html></html>',404)
response.headers = headers
return response
- 此時還可以進行重定向,只需要把狀態碼改成301,在headers里添加一個location就可以了,而且還可以寫的簡潔寫,這樣就可以了
@app.route('/hello')
def hello():
headers = {
'content-type':'text/plain',
'location':'http://www.bing.com'
}
return '<html></html>',301,headers