修改web前端訪問端口


說明: URL規則可添加變量部分,也就是說將符合同種規則的URL抽象成一個URL模式


1
2
3
@app .route( '/instance/<uuid>/' )
def  instance(uuid):
     return  'Instance: {}' . format (uuid)

注意: 尖括號中內容是動態的,凡是匹配到/instance/前綴的都會被映射到這個路由上,在內部把uuid作為參數而獲得,默認類型為字符串

 

默認轉換:

說明: 可通過<converter:variable_name>形式來指定轉換方式,converter可以是如下默認轉換器,也可以是繼承自werkzeug.routing.BaseConverter子類定義的轉換器

轉換(默認的轉換器存儲在app.url_map.converts字典里,支持自定義) 簡單
string 接收沒有任何斜杠/的文本
int 接收整型
float 接收浮點型
path 接收任意文本包含/的文本
uuid 接收唯一識別碼
any() 和PY中的內置any用法一致,可指定多腫可選路徑,但必須傳入參數

擴展: 如上轉換都是基於子路徑,如果不想使用子路徑,其實還可以通過GET/POST傳遞參數的方式給/instance,然后在視圖函數內部通過request.args.get()和request.form.get()來獲取實現

 

定義轉換:


說明: FLASK還支持自定義轉換器如Rebbit中使用分割符來實現如http://reddit.com/r/python+flask隔開兩個社區名字,方便同時查看來自多個社區的帖子,我們可以自定義甚至不一定使用"+"來實現


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
#
# Authors: limanman
# 51CTOBG: http://xmdevops.blog.51cto.com/
# Purpose:
#
"""
# 說明: 導入公共模塊
from  flask  import  Flask, jsonify
from  werkzeug.routing  import  BaseConverter
# 說明: 導入其它模塊
class  ListConverter(BaseConverter):
     def  __init__( self , url_map, separator = u '+' ):
         super (ListConverter,  self ).__init__(url_map)
         self .separator  =  separator
     def  to_python( self , value):
         return  value.split( self .separator)
     def  to_url( self , values):
         values_quoted  =  []
         for  value  in  values:
             values_quoted.append(BaseConverter.to_url(value))
         return  self .separator.join(values_quoted)
app  =  Flask(__name__)
app.url_map.converters.update({
     'list' : ListConverter
})
@app .route( '/r/<list(separator=u"+"):page_names>/' )
def  r(page_names):
     return  jsonify(page_names)
if  __name__  = =  '__main__' :
     app.run(host = '0.0.0.0' , port = 9000 , debug = True )

注意: 繼承werkzeug.routing.BaseConverter的類必須實現兩個方法to_python(value),它定義了匹配的路徑以何種方式傳入視圖函數,to_url(value),它定義了傳入視圖函數的參數的路徑原型的編碼后形式,它是供內部調用,但也是必須實現的方法,最后需要將ListConverter放到app.url_map.converters中去才會運行時生效,按照如上轉換器訪問http://127.0.0.1:9000/python+flask/時傳入視圖函數的參數page_names其實是一個被分割的列表[u'python', u'flask'],這樣我們就可以模擬Reddit實現同時獲取多個社區帖子

 

提交方法:


說明: HTTP有多個訪問URL的方法,默認只響應GET,但可以通過app.route裝飾器傳遞methods參數改變此行為,默認FLASK會自動處理HEAD/OPTIONS請求,常用GET/POST請求但隨着AJAX和RESET風格應用的流行,PUT/DELETE/PATCH請求也使用很廣泛~


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
#
# Authors: limanman
# 51CTOBG: http://xmdevops.blog.51cto.com/
# Purpose:
#
"""
# 說明: 導入公共模塊
from  flask  import  Flask, request, jsonify
# 說明: 導入其它模塊
app  =  Flask(__name__)
@app .route( '/' , methods = [ 'GET' 'POST' ])
def  index():
     return  jsonify([
         request.args,
         request.form
     ])
if  __name__  = =  '__main__' :
     app.run(host = '0.0.0.0' , port = 9000 , debug = True )

說明: GET/POST是我們最常用的方式,至於獲取GET/POST請求的參數分別用request.args和request.form來獲取通過jsonify生成的響應我們可以看出來其實它們就是兩個參數字典

 

唯一特性:


說明: FLASK的規則都是基於WerkZeug的路由模塊,它規定URL唯一,當裝飾器@app.route('/instance/')這樣時訪問/instance時會自動被修改為/instance/,而當裝飾器@app.route('/instance')這樣時訪問/instance/會返回404,必須訪問/instance才可以獲取到你想要的內容~以此來保證唯一性~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM