假如我們要訪問四個文件,目錄結構如上圖所示
@app.route(/file/<fname>)
def v_file(fname):
fullname = os.path.join(/A/B,fname)
f = open(fullname)
content = f.read()
f.close()
return cnt
測試結果表明,/file/a.txt和/file/b.txt都沒有問題,但是/file/C/c.txt和 /file/C/d.txt卻會失敗。 這是因為,默認情況下,在URL規則中的變數被視為不包含/的字元串。/file/C/c.txt 是沒有辦法匹配URL規則/file/的。 如果這裡改為path,則四個文件都可以訪問到
@app.route(/file/<path:fname>)
def v_file(fname):
fullname = os.path.join(/A/B,fname)
f = open(fullname)
content = f.read()
f.close()
return cnt
添加HTTP方法
HTTP有許多不同的訪問 URL 方法。默認情況下,路由只回應 GET 請求,但是通過 route() 裝飾器傳遞 methods 參數可以改變這個行為。例如:
@app.route(/login, methods=[GET, POST])
def login():
if request.method == POST:
do_the_login()
else:
show_the_login_form()
靜態目錄路由
當創建應用實例時,Flask將自動添加一條靜態目錄路由,其訪問點 始終被設置為static,URL規則默認被設置為/static,本地路徑默認被 設置為應用文件夾下的static子文件夾
改變默認的本地路徑 :可以在創建應用對象時使用關鍵字參數static_folder改變 默認的靜態文件夾。例如,你的靜態文件都存放在應用下的assets目錄下, 那麼可以按如下的方式創建應用對象:
app = Flask(name,static_folder=assets)
url_for函數
url_for() 函數最簡單的用法是以視圖函數名(或者app.add_url_route() 定義路由時使用的端點名)作為參數,返回對應的URL。例如,在當前程序中調用url_for(index) 得到的結果是/。調用url_for(index, _ external=True) 返回的則是絕對地址,在這個示例中是http://localhost:5000/
參數分別是 視圖函數 、變數、參數
print url_for(A,name=B,format=c)
輸出
A/B?format=c
下面這個使用_anchor關鍵字可以為生成的URL添加錨點
print url_for(A,_anchor=d)
輸出
/A#d
使用 render_template() 方法來渲染模板。Flask 會在 templates 文件夾里尋找模板。
@main.route(/, methods=[GET, POST])
def index():
return render_template(main/index.html)
這裡不再細講,url_for函數有其他功能, 1. 傳入url_for() 的關鍵字參數不僅限於動態路由中的參數。函數能將任何額外參數添加到查詢字元串中。例如,url_for(index, page=2) 的返回結果是/?page=2。 2. 通過 路由.視圖函數 可以定位到其他界面,例如
<a href="{{ url_for(main.index) }}">首頁</a>
例子
這裡是一些基本的例子:
app.route(/)
def index():
return Index Page
@app.route(/hello)
def hello():
return Hello World
但是,不僅如此!你可以構造含有動態部分的URL,也可以在一個函數上附著多個規則
參考文獻
https://www. jianshu.com/p/7adc30e8c 0f4
https:// dormousehole.readthedocs.io /en/latest/foreword.html#id2
推薦閱讀: