to_python和to_url方法

to_python:可以把url拆分,並且返回txt格式的文件。

to_url:在調用url_for函數的時候,生成一個合適的url形式

代碼:

# 需求2:查詢多個模塊的數據
# 自定義轉換器實現
class LiConverter(BaseConverter):
def to_python(self, value):
# value是自己傳遞過來的參數
# 可以對value進行加工後在返回
lm = value.split(+)
print(lm)
print(lm[0])
print(lm[1])
return lm
def to_url(self, value):
# 目的是要把[hots,enter]---->hots+enter
return +.join(value)
?
app.url_map.converters[li]=LiConverter
?
?
@app.route(/news_list2/<li:moudles2>)
def news_list2(moudles2):
print(moudles2)
# 此時參數已經進行了拆分 slect *from news where nmoudles=hots or nmoudles=enter
return "您要查詢的模塊是:%s" % moudles2
?
@app.route(/hello/)
def hello_wrold():
# 構建url
args = url_for(news_list2,moudles2=[hots,enter])
return 構建出url並返回:%s%args
?

頁面跳轉和重定向

重定向分為暫時性重定向和永久性重定向,也就是在瀏覽器上會自動跳轉到另一個頁面。

永久性重定向: http 的狀態碼是 301 ,多用於舊網址被廢棄了要轉到一個新的網址確保用戶的訪問,最經典的就是京東網站,輸入 www.jingdong.com 的時候,會被重定向到 www.jd.com。

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

Flask中的重定向

重定向是通過 redirect(location,code=302) 這個函數來實現的。

location 表示需要重定向到的 URL,應該配合之前講的 url_for()函數來使用。

code 表示採用哪個重定向,默認是 302( 暫時性重定向 ) ,可以修改成 301來實現永久性重定向。

代碼:

from flask import Flask,request,url_for,redirect
?
app = Flask(__name__)
?
?
@app.route(/)
def hello_world():
return Hello World!
?
# 登錄界面
@app.route(/login/)
def login():
return 請登錄
?
# 頁面跳轉,暫時性重定向302 永久性重定向301
@app.route(/profile/)
def profile():
if request.args.get(name):
return 用戶中心頁面
else:
return redirect(url_for(login),code=302)
?
?
app.debug=True
?
if __name__ == __main__:
app.run()

Response返回值

Response是返回值的意思,類似於return的功能, 相當於一個包裝,把返回的內容包裝起來用於其他的操作。

自定義Response對象的步驟

  • 繼承自Response類。
  • 實現方法force_type(cls,rv,environ=None)
  • 指定app.response_class為你自定義的Response對象。

代碼:

# 需求:希望將一個字典類型的數據,變成json對象返回給客戶端
# 問題:視圖函數不支持返回字典類型的數據
# 解決:自定義Response的子類對象來解決
# 步驟:
# 1.繼承自`Response`類。
# 2.實現方法`force_type(cls, rv, environ=None)`。
# 3.指定`app.response_class`為你自定義的`Response`對象。
class JSONResponse(Response):
@classmethod
# 因為是類方法
def force_type(cls, response, environ=None):

這個方法只有視圖函數返回 非字元串 非Response對象 非元組時才會調用
response:視圖函數的返回值

if isinstance(response,dict):
# 當返回類型為字典的時候,在加工操作
# 希望吧一個字典對象轉化為json對象
resp = jsonify(response)
return super(JSONResponse, cls).force_type(resp)
?
app.response_class = JSONResponse
@app.route(/myprofile/)
def profile():
return {uname:wo,gender:nan,school:sxt}

推薦閱讀:

相关文章