「Flask筆記」 URL知識點總結

「Flask筆記」 URL知識點總結

資源介紹參數
資源類別: Python
如遇問題: 聯繫客服/留言反饋
釋放雙眼,帶上耳機,聽聽看~!
flask – 第一個flask程式。本來打算新開一篇,但是太短了,就整合到這裡了第一個flask程式。其中config文件時從配置文件中開啟debug也可以在app.run(debug=True)這樣開啟debug因為後期鏈接數據庫的配置卸載config中,所以這裡使用配置文件開啟debug。

flask — 第一個flask程式


本來打算新開一篇,但是太短了,就整合到這裡了

第一個flask程式

from flask import Flask
import config

app = Flask(__name__)
app.config.from_object(config)

@app.route('/')       #定義一個路由
def hello_world():    #定義一個視圖函式
    return 'Hello World!'


if __name__ == '__main__':
    app.run()

其中config文件時從配置文件中開啟debug
也可以在app.run(debug=True)這樣開啟debug
因為後期鏈接數據庫的配置卸載config中,所以這裡使用配置文件開啟debug
這裡有個坑,就是專業版的pycharm,創建一個flask項目的話debug要在Configurations下勾選FLASK_DEBUG不然開啟不了
注意 在配置文件里DEBUG要大寫

flask — URL


唯一URL

from flask import Flask
import config

app = Flask(__name__)
app.config.from_object(config)

@app.route('/hello')
def hello_world():
    return 'Hello World!'

#app.route('/hi/')
def hi_world():
    return 'hi World!'

if __name__ == '__main__':
    app.run()

url_for方法

用來反轉URL,url_for這個方法的第一個參數是視圖函式的名稱,後面的是傳遞的參數,如果在視圖函式中這個參數定義了,那麼就會當成path傳給這個url,如果沒有定義,那麼就會當成get請求,傳入url中。
注意 url_for 會自動處理特殊字符,例如/

當你訪問127.0.0.1/hello/的時候會Not Found但是訪問127.0.0.1/hi/不會,因為127.0.0.1/hi/就相當於在訪問的127.0.0.1/hi做了一個重定向,跳轉到127.0.0.1/hi/

URL傳遞參數

傳遞參數

傳遞參數的語法是://。然後再試圖函式中,也要定義同名的參數。

get請求傳遞參數

@app.route('/get/')
def arg_get():
    wd = request.args.get('wd') #get請求參數
    return 'get請求的參數是%s' % wd

參數的數據類型

  1. 如果沒有指定,那麼預設就是string
  2. 指定int,float 就只能傳遞相應的數據類型
  3. path類型,與string類型相似,但是可以傳遞路徑,即可以出現/
  4. uuid類型,只接受uuid字符串,唯一的
  5. any類型,可以指定多種路徑,這個通過一個例子來說明
@app.route('/<any(blog,user):url_path>/<id>')
def detaol(url_path,id):
    if url_path=='blog':
        return '博客詳情 %s' % id
    else:
        return '使用者詳情 %s' % id

意思就是,你可以選擇傳入的時blog還是user

自訂URL轉換器

自訂個url類型轉換器
首先導入from werkzeug.routing import BaseConverter模塊
ctrl+b進入源碼,可以看到這裡定義的BaseConverter類,下面的PathConverter,NumberConverter等,就是之前的參數數據類型都是繼承了這個類,然後通過一些方法來定義的轉換器,定義完成後加入到DEFAULT_CONVERTERS對應關係中。通過app.url_map.converters['轉換器名'] = 定義的轉換規則來加入到對應關係中
例1,定義一個簡單的手機號碼轉換器

from flask import Flask
from werkzeug.routing import BaseConverter
import config

app = Flask(__name__)
app.config.from_object(config)

# 限定手機號碼的格式
class TelConverter(BaseConverter):
    regex = r'1[85734]\d{9}'

#添加到轉換器中
app.url_map.converters['tel'] = TelConverter

#使用定義的轉換器
@app.route('/tel/<tel:my_tel>/')
def tel(my_tel):
    return 'your tel is %s' % my_tel

例2,定義一個按照規則分離出兩個參數的轉換器
介紹兩種方法
to_python方法:將傳入的value返回到視圖函式中做參數
to_url方法:將傳入的value調用url_for生成符合要求的url形式

然後定義一個轉換器

class ListConverter(BaseConverter):
    def to_python(self, value):
        return value.split('+')
    def to_url(self, value):
        return '+'.join(value)
app.url_map.converters['list'] = ListConverter

@app.route('/')
def hello_world():
    url = url_for('postsa',broad=['a','b'])
    return url

@app.route('/posts/<list:broads>/')
def postsa(broads):
    return "your posts is %s"%broads

重定向

重定向分為永久性重定向和暫時性重定向,在頁面上體現的操作就是瀏覽器會重一個頁面自動跳轉另外一個頁面,比如使用者訪問了一個需要權限的頁面,但是該使用者當前並沒有登錄,因此我們給它重定向到登錄頁面

永久性重定向:_http的狀態碼是301,多用於舊網址就廢棄了要轉到一個新的網址確保使用者的訪問www.jingdong.com —> www.jd.com

暫時性重定向:http的狀態碼是302,表示頁面的暫時性跳轉。比如訪問一個需要權限的網址,如果使用者沒有登錄,應該重定向到登錄頁面,這種情況下,應該用暫時性重定向

在flask中,重定向是通過flask.redirect(location,code=302)這個函式來實現,location表示需要重定向的url,應該配合之前將的url_for()函式來使用,code表示採用那個重定向,預設是302即暫時性重定向,可以修改成301來實現永久性重定向

重定向方法

可以使用 redirect()方法配合url_for()反轉url來實現跳轉

from flask import Flask,redirect,url_for
from datetime import datetime
app = Flask(__name__)

@app.route('/')
def index():
    return 'hello world'

@app.route('/login/<username>')
def login(username):
    if username=='admin':
        return "hello %s" % username
    else:
        return redirect(url_for("index")) #重定向到index

if __name__ == '__main__':
    app.run(debug=True)
聲明:本文為原創作品,版權歸作者所有。未經許可,不得轉載或用於任何商業用途。如若本站內容侵犯了原著者的合法權益,可聯繫我們進行處理。

給TA打賞
共{{data.count}}人
人已打賞
0 條回復 A文章作者 M管理員
    暫無討論,說說你的看法吧