一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Python - 關(guān)于Flask 視圖介紹

關(guān)于Flask 視圖介紹

2022-03-08 00:27tigeriaf Python

這篇文章主要分享的是關(guān)于Flask 視圖介紹, Flask 中路由是請求的 url 與處理函數(shù)之間的映射,使用app.route裝飾器將處理函數(shù)和 url 綁定,路由綁定的處理函數(shù)就被成為視圖函數(shù)。下面來看文章的詳細(xì)內(nèi)容,需要的朋友也可以參考一下

1、視圖函數(shù)

之前的文章說過,在 Flask 中路由是請求的 url 與處理函數(shù)之間的映射,使用app.route裝飾器將處理函數(shù)和 url 綁定,路由綁定的處理函數(shù)就被成為視圖函數(shù)。

?
1
2
3
4
5
@app.route('/user/<name>')
 
def hello_user(name):
 
    return 'Hello {}!'.format(name)

上面的hello_user()函數(shù)就是一個(gè)簡單的視圖函數(shù)。

當(dāng)然我們也可以不使用app.route裝飾器,使用app.add_url_rule()方法也可將視圖函數(shù)和 url 進(jìn)行綁定,實(shí)際上裝飾器app.route也是調(diào)用的app.add_url_rule()方法。

?
1
2
3
4
5
def hello():
 
    return 'hello Flask!'
 
app.add_url_rule('/hello', view_func=hello)

通過app.add_url_rule()方法,可以將路由同視圖分開,方便將路由進(jìn)行統(tǒng)一管理。

2、類視圖

我們之前包括上面使用的,都是基于函數(shù)的視圖,這雖然是最簡單便捷的用法,但是不容易擴(kuò)展,其實(shí)視圖函數(shù)也可以基于類來實(shí)現(xiàn),好處就是類支持繼承,可以把一些共性的代碼放在父類中,其他子類可以繼承,在某些情況下,使用類更合理,更易于擴(kuò)展。

類視圖分為標(biāo)準(zhǔn)類視圖和基于調(diào)度方法的類視圖,下面分別介紹一下。

2.1 標(biāo)準(zhǔn)類視圖

標(biāo)準(zhǔn)類視圖的寫法:

  • 父類必須繼承 flask.views.View
  • 子類實(shí)現(xiàn)dispatch_request()方法,完成自身的業(yè)務(wù)邏輯并返回結(jié)果
  • 子類使用app.add_url_rule()進(jìn)行注冊,其中view_func參數(shù)使用as_view()方法做類方法轉(zhuǎn)換
  • 如果注冊時(shí)指定了endpoint參數(shù),endpoint的值會(huì)覆蓋指定的視圖名稱,使用url_for時(shí)就必須使用endpoint指定的值

具體使用方式如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
from flask.views import View
 
class ParentView(View):
 
    def __init__(self):
 
        super().__init__()
 
        # 公共部分信息
 
        self.public_data = 'Flask Web App'
 
class Index(ParentView):
 
    methods = ['GET']
 
    def dispatch_request(self):
 
        return self.public_data + " index"
 
class User(ParentView):
 
    methods = ['POST']
 
    def dispatch_request(self):
 
        return self.public_data + " user"
 
app.add_url_rule('/index', endpoint='index', view_func=Index.as_view('index'))
 
app.add_url_rule('/user', endpoint='user', view_func=User.as_view('user'))

上述代碼中創(chuàng)建了一個(gè) ParentView 類,繼承自 flask.views.View 類,然后創(chuàng)建了 Index User 兩個(gè)類繼承自 ParentView 類,并分別重寫實(shí)現(xiàn)了dispatch_request()函數(shù),使用了父類 ParentView 的屬性public_data, 實(shí)現(xiàn)自己的業(yè)務(wù)邏輯。然后我們通過as_view()方法把類轉(zhuǎn)換為實(shí)際的視圖函數(shù),as_view()必須傳入一個(gè)唯一不重復(fù)的視圖名。此后,這個(gè)視圖由app.add_url_rule()方法和指定路由綁定。

類視圖支持的 HTTP 請求方法由視圖類變量methods指定,默認(rèn)只支持 GET 請求。

2.1.1 基于方法的視圖

如果視圖支持多種 HTTP 請求方法的話,之前我們都是在視圖函數(shù)中進(jìn)行判斷,根據(jù)不同的請求方法執(zhí)行不同的業(yè)務(wù)邏輯,那有沒有更簡單的方法呢?是有的,Flask 中的方法類視圖 flask.views.MethodView 就可以做到,它是 flask.views.View 的子類,通過定義和請求方式同名的小寫方法來完成了邏輯處理,不必提供methods屬性,每個(gè) HTTP 方法都映射到一個(gè)具有相同名稱(小寫)的函數(shù)。

下面看下詳細(xì)使用方法。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
from flask.views import MethodView
 
class UserView(MethodView):
 
    def get(self):
 
        user_id = request.args.get("user_id")
 
        return "Hello user:{}".format(user_id)
 
 
 
    def post(self):
 
        name = request.form.get("name")
 
        password = request.form.get("password")
 
        if name == "admin" and password == "123456":
 
            return "hello admin!"
 
        else:
 
            return "not allow!"
 
app.add_url_rule('/user/get_info', view_func=UserView.as_view('get'))
 
app.add_url_rule('/user/login', view_func=UserView.as_view('post'))

代碼中定義的get()函數(shù)用于處理 GET 請求,post()函數(shù)用于處理 POST 請求,代碼中省去了 HTTP 請求方法的判斷語句,而且是不是更加RESTFul一些了。

請求測試:

關(guān)于Flask 視圖介紹

到此這篇關(guān)于 關(guān)于Flask 視圖介紹的文章就介紹到這了,更多相關(guān)Flask 視圖內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://juejin.cn/post/7032867176088338445

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 精品久久久久久久久久久久久久久 | 青青青在线免费 | 男人曰女人 | 国产欧美一区二区精品性色 | 91精品国产亚一区二区三区 | 娇妻终于接受了3p的调教 | 精品国产成a人在线观看 | 日本黄色一区 | 国产一区二区三区在线看片 | 色久天| 国产免费午夜高清 | 国产思妍小仙女一二区 | 特级毛片免费观看视频 | 男女激情网 | 国产福利自产拍在线观看 | 亚洲国产自拍在线 | 欧美贵妇videos办公室360 | 国产馆精品推荐在线观看 | 色综合网天天综合色中文男男 | 久久久96| 欧美日韩亚洲综合在线一区二区 | h肉动漫在线视频无修无遮挡 | 免费看一级 | 男女激情视频1000辣妞范 | 99热精品69堂国产 | 四虎综合九九色九九综合色 | 999任你躁在线精品免费不卡 | 国产在线精品一区二区高清不卡 | 1024人成网站色 | 国产123区在线视频观看 | 亚洲福利一区 | 国产露脸对白刺激3p在线 | 波多野结衣护士 | 三级伦理在线播放 | 国产一区二区不卡视频 | 扒开双腿羞辱调教play视频 | 色老头影视| 亚洲色图2 | 扒开老师挠尿口到崩溃刑罚 | 亚洲精品国产自在现线最新 | 青青青视频蜜桃一区二区 |