日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Flask-第二课:路由

發布時間:2025/3/17 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Flask-第二课:路由 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

無論是Django,還是Flask或者別的web框架的路由的目的都是建立url和函數的對應關系。

對于Flask,他的路由使用裝飾器來完成。

最簡單的路由

@app.route('/') def index():return 'Index Page'@app.route('/hello') def hello():return 'Hello World' basic_url

route() 裝飾器把一個函數綁定到對應的 URL 上。

動態路由

我們經??吹筋愃苃ttp://www.cnblogs.com/yangshl/的url。這里的yangshl是我的博客園的用戶名。在Fask中也有帶變量的路由。

給 URL 增加變量的部分,把一些特定的字段標記作為參數傳入到函數中。當然也可以指定一個可選的轉換器通過規則 。

@app.route('/<path:username>/<pid>/hello') def hello_world(pid, username):print("pid", pid)print("username", username)return 'Hello World!' View Code

若url是:http://127.0.0.1:8090/kelly/hi/28/hello

則我們截取到

pid 28
username kelly/hi

這說明函數中參數的順序可以和url中變量的順序不一致,他們是按照關鍵字來傳參的。而且路由的前后都可以固定的url部分。

其中:path是路由轉換器。

實際上Flask有如下幾個路由轉換器:

  • 'default': <class 'werkzeug.routing.UnicodeConverter'>
  • 'string': <class 'werkzeug.routing.UnicodeConverter'>
  • 'any': <class 'werkzeug.routing.AnyConverter'>
  • 'path': <class 'werkzeug.routing.PathConverter'>
  • 'int': <class 'werkzeug.routing.IntegerConverter'>
  • 'float': <class 'werkzeug.routing.FloatConverter'>
  • 'uuid': <class 'werkzeug.routing.UUIDConverter'>

我們通過url傳遞的變量都是字符串,可以通過轉換器來來進行轉換類型和規定它匹配的格式。比如int,若我么傳入了abc,則不匹配,會報404錯誤。

自定義路由轉換器。

class RegexConverter(BaseConverter):def __init__(self, map, *args):self.map = mapself.regex = args[0]

# 注冊轉換器
app.url_map.converters['regex'] = RegexConverter

@app.route('/view/<regex("[0-9\.,]+"):uuid>/')
def view(uuid):
  return "view uuid: %s" % (uuid)

再進一步:self.regex到底是什么?
Flask(其實是Werkzeug)使用Converter把URL中特殊部分(<regex("[a-zA-Z0-9]+"):uuid>)轉換為Python變量,通用格式是<converter(args):var_name>。在這個例子中,一個叫regex的converter把URL中相應字段轉換為view()中的uuid變量。
因此,converter的regex就是用來判斷這串字符是否符合轉換格式,ok就轉換,否則跳過。對于IntegerConverter來說,"abc"顯然無能為力。也就是說,其實Werkzeug的路由本來就支持用正則表達式。string、int、float等都是從它派生出來的(可以看看IntegerConverter等built-in Converter的regex)。
至于為什么不顯式地支持,我猜可能是因為正則表達式不容易寫好,buggy。

反向路由

本質是根據函數名反向生成url,使用函數 url_for() 來針對一個特定的函數構建一個 URL。它能夠接受函數名作為第一參數,以及一些關鍵字參數, 每一個關鍵字參數對應于 URL 規則的變量部分。未知變量部分被插入到 URL 中作為查詢參數。

with app.test_request_context():
  print(url_for('hello_world', username = 'kelly', pid = '12'))

則得到的url是:/kelly/12/hello

若url_for('hello_world', username = 'kelly', pid = '12', _external=True)則返回完整路徑:

http://localhost/kelly/12/hello

反向路由在Jinja2中也有使用,用于引入一些靜態文件。

?

總之:路由是url和處理函數之間的橋梁。

?

轉載于:https://www.cnblogs.com/yangshl/p/6408084.html

總結

以上是生活随笔為你收集整理的Flask-第二课:路由的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。