Flask-基本原理與核心知識

來源:互聯網
上載者:User
虛擬環境
  1. 使用pipenv建立一個虛擬環境和項目綁定,安裝:E:\py\qiyue\flask>python3 -m pip install pipenv
  2. 和項目綁定:到項目的目錄中pipenv install,然後pipenv shell,就進入到了虛擬環境中了,然後就可以安裝各種包了,比如pipenv install flask,
  3. 常見的pipenv命令,退出exit,進入pipenv shell,安裝pipenv install 包名,卸載pipenv uninstall 包名,查看安裝包的依賴關係pipenv graph
  4. 與pycharm綁定,在虛擬環境中pipenv --venv,就會顯示一個對應的目錄,然後在pycharm中選擇環境時綁定一下就可以了,這樣啟動並執行就是這個虛擬環境了
flask最小原型與唯一URL原則
  1. 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()
  1. 唯一URL原則,此時若使用者訪問http://127.0.0.1:5000/hello/網址,因為多了一個斜杠,那麼這個頁面就找不到,若此時@app.route('/hello/')這裡多個一個斜杠,就可以訪問了,
  2. 但是此時訪問不帶斜杠的也是可以的,那時因為flask底層做了一次重新導向
路由的另一種註冊方法
  1. 因為每一次修改完代碼還的重啟伺服器才能看見效果,所以這個時候開啟debug模式就可以了,在app.run(debug=True)添加就行了,這樣就方便多了
  2. 路由的另一種註冊方法,使用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)
  1. 但是通常的情況下還是使用裝飾器就可以了
app.run相關參數與flask設定檔
  1. 此時的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)
  1. 若項目上線的話,此時debug模式就不能開啟,因為要保持原始碼的一致性,所以此時盡量不能刪除這個debug,這個時候寫一個設定檔,在目錄中建立一個config.py
# -*- coding: utf-8 -*-DEBUG = True
  1. 這個時候在檔案中, 先載入這個檔案,然後進行讀取,注意參數要大寫
# -*- coding: utf-8 -*-from flask import Flaskapp = 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 的作用
  1. 有這個判斷的話,只有這個檔案作為入口檔案的情況下,這個run才會執行
if __name__ == '__main__':    app.run(host='0.0.0.0',debug=app.config['DEBUG'],port=81)
  1. 產生環境下通常不會使用flask內建的伺服器,而是使用nginx+uwsgi,此時這個檔案就不是入口檔案了,這個時候uwsgi也是一個伺服器,若沒有加判斷就會同時有兩個伺服器了,所以這個加上判斷是必要的
Response
  1. 視圖函數返回的其實就是一個Response,若這樣寫,此時頁面上什麼也沒有,預設的content-type = text/html
@app.route('/hello')def hello():    return '<html></html>'
  1. 返回的有這麼幾個重要的參數status code,content-type,也可以自訂,此時返回的<html></html>,因為使用的文本解析,當然了還可以返回jsonapplication/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
  1. 此時還可以進行重新導向,只需要把狀態代碼改成301,在headers裡添加一個location就可以了,而且還可以寫的簡潔寫,這樣就可以了
@app.route('/hello')def hello():        headers = {        'content-type':'text/plain',        'location':'http://www.bing.com'    }    return '<html></html>',301,headers    

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.