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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【Flask】视图高级

發布時間:2023/11/27 生活经验 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Flask】视图高级 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

# 視圖高級筆記:
### `add_url_rule(rule,endpoint=None,view_func=None)`
這個方法用來添加url與視圖函數的映射。如果沒有填寫`endpoint`,那么默認會使用`view_func`的名字作為`endpoint`。以后在使用`url_for`的時候,就要看在映射的時候有沒有傳遞`endpoint`參數,如果傳遞了,那么就應該使用`endpoint`指定的字符串,如果沒有傳遞,那么就應該使用`view_func`的名字。

### `app.route(rule,**options)`裝飾器:
這個裝飾器底層,其實也是使用`add_url_rule`來實現url與視圖函數映射的。


## 類視圖:
### 標準類視圖:
1. 標準類視圖,必須繼承自`flask.views.View`.
2. 必須實現`dipatch_request`方法,以后請求過來后,都會執行這個方法。這個方法的返回值就相當于是之前的函數視圖一樣。也必須返回`Response`或者子類的對象,或者是字符串,或者是元組。
3. 必須通過`app.add_url_rule(rule,endpoint,view_func)`來做url與視圖的映射。`view_func`這個參數,需要使用類視圖下的`as_view`類方法類轉換:`ListView.as_view('list')`。
4. 如果指定了`endpoint`,那么在使用`url_for`反轉的時候就必須使用`endpoint`指定的那個值。如果沒有指定`endpoint`,那么就可以使用`as_view(視圖名字)`中指定的視圖名字來作為反轉。
5. 類視圖有以下好處:可以繼承,把一些共性的東西抽取出來放到父視圖中,子視圖直接拿來用就可以了。但是也不是說所有的視圖都要使用類視圖,這個要根據情況而定。

### 基于請求方法的類視圖:
1. 基于方法的類視圖,是根據請求的`method`來執行不同的方法的。如果用戶是發送的`get`請求,那么將會執行這個類的`get`方法。如果用戶發送的是`post`請求,那么將會執行這個類的`post`方法。其他的method類似,比如`delete`、`put`。
2. 這種方式,可以讓代碼更加簡潔。所有和`get`請求相關的代碼都放在`get`方法中,所有和`post`請求相關的代碼都放在`post`方法中。就不需要跟之前的函數一樣,通過`request.method == 'GET'`。

### 類視圖中的裝飾器:
1. 如果使用的是函數視圖,那么自己定義的裝飾器必須放在`app.route`下面。否則這個裝飾器就起不到任何作用。
2. 類視圖的裝飾器,需要重寫類視圖的一個類屬性`decorators`,這個類屬性是一個列表或者元組都可以,里面裝的就是所有的裝飾器。


## 藍圖:
1. 藍圖的作用就是讓我們的Flask項目更加模塊化,結構更加清晰。可以將相同模塊的視圖函數放在同一個藍圖下,同一個文件中,方便管理。
2. 基本語法:
* 在藍圖文件中導入Blueprint:

1 from flask import Blueprint
2 user_bp = Blueprint('user',__name__)

?


* 在主app文件中注冊藍圖:

1 from blueprints.user import user_bp
2 app.regist_blueprint(user_bp)

?


3. 如果想要某個藍圖下的所有url都有一個url前綴,那么可以在定義藍圖的時候,指定url_prefix參數:

1 user_bp = Blueprint('user',__name__,url_prefix='/user/')

?


在定義url_prefix的時候,要注意后面的斜杠,如果給了,那么以后在定義url與視圖函數的時候,就不要再在url前面加斜杠了。

4. 藍圖模版文件的查找:
* 如果項目中的templates文件夾中有相應的模版文件,就直接使用了。
* 如果項目中的templates文件夾中沒有相應的模版文件,那么就到在定義藍圖的時候指定的路徑中尋找。并且藍圖中指定的路徑可以為相對路徑,相對的是當前這個藍圖文件所在的目錄。比如:

1 news_bp = Blueprint('news',__name__,url_prefix='/news',template_folder='saber')

?


因為這個藍圖文件是在blueprints/news.py,那么就會到blueprints這個文件夾下的 saber 文件夾中尋找模版文件。

5. 藍圖中靜態文件的查找規則:
* 在模版文件中,加載靜態文件,如果使用url_for('static'),那么就只會在app指定的靜態文件夾目錄下查找靜態文件。
* 如果在加載靜態文件的時候,指定的藍圖的名字,比如`news.static`,那么就會到這個藍圖指定的static_folder下查找靜態文件。

6. url_for反轉藍圖中的視圖函數為url:
* 如果使用藍圖,那么以后想要反轉藍圖中的視圖函數為url,那么就應該在使用url_for的時候指定這個藍圖。比如`news.news_list`。否則就找不到這個endpoint。在模版中的url_for同樣也是要滿足這個條件,就是指定藍圖的名字。
* 即使在同一個藍圖中反轉視圖函數,也要指定藍圖的名字。

### 藍圖實現子域名:
1. 使用藍圖技術。
2. 在創建藍圖對象的時候,需要傳遞一個`subdomain`參數,來指定這個子域名的前綴。例如:`cms_bp = Blueprint('cms',__name__,subdomain='cms')`。
3. 需要在主app文件中,需要配置app.config的SERVER_NAME參數。例如:
```python
app.config['SERVER_NAME'] = 'jd.com:5000'
```
* ip地址不能有子域名。
* localhost也不能有子域名。
4. 在`C:\Windows\System32\drivers\etc`下,找到hosts文件,然后添加域名與本機的映射。例如:
```python
127.0.0.1 jd.com
127.0.0.1 cms.jd.com
```
域名和子域名都需要做映射。

?

轉載于:https://www.cnblogs.com/chen0427/p/8605495.html

總結

以上是生活随笔為你收集整理的【Flask】视图高级的全部內容,希望文章能夠幫你解決所遇到的問題。

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