天天看點

Flask入門 flask結構 url_for 重定向(1)

Flask入門(一)

1 安裝虛拟環境Mac,linux

sudo pip install virtualenv             

​ ubuntu系統

sudo apt-get install python-virtualenv           

2 安裝flask

1 python3 環境下全局安裝
pip3 install flask

2 虛拟環境下virtualenv下安裝
首先先建立env虛拟環境
mkdir myproject   #建立項目目錄
cd myproject
virtualenv venv   #安裝虛拟檔案目錄venv

source /venv/bin/activate #啟動新項目
pip3 install flask

注:部分編輯器建立虛拟環境,Python的解釋路徑需要更改.

3 pycharm中運作flask,選擇flask建立project,一定要加載建立的虛拟環境,找到虛拟環境目錄設定python解釋器,設定項目目錄           

3 flask初起航

3.1最簡單的flask程式
from flask import Flask   #導入類Flask
app = Flask(__name__) #類的執行個體是WSGI應用程式App

# route() 裝飾器把一個函數綁定到對應的 URL 上
@app.route('/')
def hello():
    return 'hello python'

#主函數入口  
if __name__ == '__main__':
    app.run()

注:
(1)  __name__就是辨別子產品的名字的一個系統變量。這裡分兩種情況:假如目前子產品是主子產品hello.py
,那麼此子產品名字__name__就是__main__,通過if判斷這樣就可以執行“__mian__:”後面的主函數内容;
假如此子產品是被import導入的,則此子產品名字__name__為檔案名 : hello,
通過if判斷這樣就會跳過“__mian__:”,不執行後面的函數.
(2) 啟動參數:
     debug   預設為False   True  debug=True不能用于生産環境
     port    指定端口号  預設5001
     host    指定主機名   host='0.0.0.0'  所有公網ip均可通路
     threaded  線程  True
(3) 包括 Flask類引入,Flask類執行個體app,綁定路由,定義函數,設定主函數這5個過程.
(4) debug = True 可以進入debug模式,既可以不重新開機服務加載,又可以顯示頁面錯誤資訊.           
3.2 配置檔案
1 建立一個config.py檔案
2 在主app檔案中導入這個檔案,并且配置到app中,示例代碼如下
  import config
  app.config.from_object(config)
3 還有很多其他的參數,都是放在改配置檔案中,如SECRET_KEY等           

4 flask參數與變量

4.1 變量
1 變量作為參數傳遞: 文法<variable_name>

#(單個參數)
@app.route('/find_girl/<name>')
#視圖名稱
def findGirl(name):
    return 'Hello girl,name is {}'.format(name)
#(多個參數)
@app.route('/find_girl/<name>/<age>')
#視圖名稱
def findGirl(name,age):
    return 'Hello girl,name is {},age is {}'.format(name,age)           
4.2 參數類型
(1) string 預設就為字元串 
(2) int     限制傳遞進來的參數為 int類型 不做類型的轉換
(3) float   限制傳遞進來的參數為 float類型 不做類型的轉換
(4) path    将請求的路由位址後面的所有參數 都認為是一個參數的值 不再做路由的查找

@app.route('/arg_type/<string:arg>') #傳遞進來的資料 都更改為n字元串
@app.route('/arg_type/<int:arg>')    #限制傳遞資料類型為int
@app.route('/arg_type/<float:arg>')  #限制傳遞資料類型為float
@app.route('/arg_type/<path:arg>/')  #将路由位址後面的所有 都認為是參數           

5 構造響應與抛出異常

5.1 構造響應
下面我們來講下構造響應:
構造響應通過導入  from flask import make_response
可以使用 render_template() 方法來渲染模闆  404模闆頁面 : error.html

@app.route('/res')
def res():
    response = make_response(render_template('error.html'), 404)
    return response
浏覽器頁面結果:  響應結果             
5.2 抛出異常
需要引入abort   from flask import abort    先抛出錯誤狀态碼再捕獲

#抛出500錯誤碼
@app.route('/look_meizi/')
def look_meizi():
    abort(500)

#捕獲指定的404狀态碼  支援錯誤頁面的定制
@app.errorhandler(404)
def page_not_found(e):
    return '你請求的位址被外星人挾持走了!!!'

#捕獲500伺服器錯誤狀态碼
@app.errorhandler(500)
def server_error(e):
    return e           

6 重定向與構造URL

6.1 重定向
需要 from flask import redirect

def myRedirect():
    #重定向到res綁定的URL
     return redirect('/res')
     #或者重定向帶參數的URL
     return redirect('/find_girl/name')           
6.2 構造URL(URL反轉):
  • 在頁面重定向中會使用url反轉,url_for(‘hello’)可以找到hello視圖函數對應的路由
    • 在模闆中,也會使用url反轉.
如果 Flask 能比對 URL,那麼 Flask 可以生成它們嗎?當然可以
構造URL通過引入   from flask import url_for

@app.route('/redirect/')
def myRedirect():
    #url_for 重定向接路由位址,redirect重定向到改位址,是以一般組合用起來很友善

    #url_for 構造無參url
    # return redirect(url_for('hello'))
    #url_for 構造帶參url,這樣不管find_girl的路由怎麼變,都可以重定向至該頁面
    return redirect(url_for('find_girl',name='goodsunck'))