flask-restful接口

同flask一樣,flask-restful同樣支持返回任一迭代器,它將會被轉換成一個包含原始 Flask 響應對象的響應:

class ArticleApi(Resource):def get(self):return {"hello":"world"},201,{"course":"python"}

在此基礎上還可以做一個靈活的拓展,假設我們根據發來的請求對數據庫進行了檢索,并將結果賦給名為student的變量。如果搜索結果即最后的student為空,則狀態碼為404,否則為200。比較pythonic的寫法為:

return {'student': student}, 200 if student is not None else 404

在這里插入圖片描述

?

flask-restful為我們提供了一個方法去驗證請求參數:reqparse

from flask_restful import reqparse
class ArticleApi(Resource):def get(self):parse = reqparse.RequestParser()parse.add_argument("title_id",type=int,help="title參數的值只能是int類型!")# add_argument第一個參數代表請求的參數名稱,type表示限定請求的參數類型,實際做的是將參數進行強制轉換,如果可以就證明參數類型正確,help表示出錯后的提示信息。args = parse.parse_args(strict=True) # parse_args會接收reqparse驗證后的參數,以字典形式返回,strict=True表示限定參數只能是add_argument中添加的參數,否則返回400錯誤。print(args)return {"hello":"world"}

此時我們請求http://127.0.0.1:5000/v1/article/?title_id=abc:


在這里插入圖片描述
當我們請求http://127.0.0.1:5000/v1/article/?title_id=1&id=1:


在這里插入圖片描述
對于一個視圖函數,可以指定好一些字段用于返回。在使用ORM模型或者自定義模型時,他會自動獲取模型當中的相應字段,生成json數據返回給客戶端,我們需要導入flask_restful.marshl_with裝飾器,并且需要寫一個字典來指定需要返回的字段,以及該字段的數據類型:

article = Article.query.all()列表、

定義時

'article ': fields.List(fields.Nested(article _fields)),

?

?

article = Article.query.first() 對象

?

from flask_restful import fields,marshal_with
resource_fields = {"id":fields.Integer,"title":fields.String(default=None,attribute=None),# 在返回字段時有時候沒有值,我們可以使用default來設置一個默認值,例:default="默認標題"# 如果我們在返回字段時想要以"headline"作為標題名返回給用戶,但數據庫中對應的字段名是"title",這時候我們可以使用attribute配置這種映射,例:"headline":fields.String(attribute="title")"author_id":fields.String,"author":fields.Nested({ # Nested可以進行嵌套字段"username":fields.String,"phone":fields.String}),"tag":fields.List(fields.Nested({"id":fields.Integer,"name":fields.String}))}
class ArticleApi(Resource):@marshal_with(resource_fields)def get(self):article = Article.query.first()return article # 返回article時,flask_restful會自動讀取arctile模型上的id,title、author_id、tag以及author屬性,組成一個json字符串返回給客戶端。# 查找字段時,會使用article.id,article.title,article.author_id,article.author.username,article.author.phone,article.tag.id,article.tag.name進行查找

在這里插入圖片描述
我們還可以通過繼承fields.Row來自定義字段類型:

# 自定義字段將輸出的小寫字母全部變為大寫
class UpperString(fields.Raw):def format(self, value):return value.upper()
resource_fields = {"value":UpperString
}
class ArticleApi(Resource):@marshal_with(resource_fields)def get(self):return {"value":"abc"}
api.add_resource(ArticleApi,"/article/",endpoint="article")

在這里插入圖片描述
flask-restful返回Json格式的數據,但有時候我們要渲染html模版,返回html格式的數據,可以使用representation()裝飾器來實現:

@api.representation('text/html')
def output_html(data, code, headers=None):"""輸出函數有三個參數,data,code,以及 headers,data 是你從你的資源方法返回的對象,code 是預計的 HTTP 狀態碼,headers 是設置在響應中任意的 HTTP 頭。你的輸出函數應該返回一個 Flask 響應對象。"""print(data)response = make_response(data)return response

此時就可以返回html頁面了。
flask-restful還有一些中高級用法,具體可參考:http://www.pythondoc.com/Flask-RESTful/index.html。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456287.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456287.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456287.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

如約而至 Nexus 6 的 Android 7.1.1 已經上線

經過近一個月的等待,Google 已正式為 Nexus 6 推送 Android 7.1.1 更新,本次更新版本號為 N6F26Q,可以點擊這里下載完整系統鏡像或者下載 OTA 升級包。 相比其他 Nexus 和 Pixel 設備,Nexus 6 已經發布了超過兩年之久,…

關于jedis2.4以上版本的連接池配置,及工具類

jedis.propertise 注意以前版本的maxAcitve和maxWait有所改變,JVM根據系統環境變量ServerType中的值 取不同的配置,實現多環境(測試環境、生產環境)集成。 redis.pool.maxTotalredis.pool.maxActive.${ServerType} redis.pool.max…

關于response格式轉換

調用圖靈機器人api實例: class RobotHandler(WebSocketHandler):def open(self):# print("WebSocket opened",self.request.remote_ip)robot_set.add(self)# 獲取websocket的發過來的信息def on_message(self, message):urlhttp://openapi.tuling123.com/…

微軟老兵 Antoine LeBlond 將正式離職

Antoine LeBlond (安東勒布朗)是微軟眾高管之一,他在微軟工作將近25年之久,然而他將在下周一,也就是他在微軟的第9000天正式離職. 在發給微軟眾同事的郵件中,勒布朗表示他希望"探索微軟之外的世界". 勒布朗在微軟Office部門度過了他在微軟的前20年時光,并與前微軟高管…

轉載——java synchronized詳解

文章來源:http://www.cnblogs.com/GnagWang/archive/2011/02/27/1966606.html轉載于:https://www.cnblogs.com/insist8089/p/6515885.html

Django中的F對象和Q對象

F對象 可以獲取到自己的屬性值實現自己的屬性自己的屬性關聯的復雜條件支持運算 Q對象 Q對象實際上是對條件的一個封裝封裝后支持邏輯運算與或非 &|~ 支持嵌套 例子 from django.db.models import Max, Avg, F, Q from django.http import HttpResponse from django.s…

總鏈接

字符集修改、Linux時間同步、調整文件描述符http://11815879.blog.51cto.com/11805879/1915276正則表達式:http://11815879.blog.51cto.com/11805879/1919777 文件系統inode與blockhttp://11815879.blog.51cto.com/11805879/1917068 文件類型與軟硬鏈接:…

Django模型關系

模型關系 1:1 一對一 (一個身份證對應一個駕照) 是使用外鍵唯一約束實現的對應最多只能有一個我們通常會在從表中聲明關系 主表,從表 主表數據刪除,從表數據級聯刪除從表數據刪除,主表不受影響誰聲明關系&#xff0c…

Android常用開源項目

Android常用開源項目 Android 2014-05-23 16:39:43 發布您的評價: 4.3 收藏 24收藏Android開源項目第一篇——個性化控件(View)篇包括ListView、ActionBar、Menu、ViewPager、Gallery、GridView、ImageView、ProgressBar、TextView、其他Android開源項目第二篇——工具庫…

Django中數據知識點歸納

Django對象的增刪改查 我們為了對django對象的增刪改查進行總結,先在model.py文件中創建類便于舉例 定義學生: class Students(models.Model):snamemodels.CharField(max_length20)sgendermodels.BooleanField(defaultTrue)sagemodels.IntegerField()…

面 試 細 節 一 點 通

面談的禮節是社會新人及求職者踏人社會工作前最重要且最需學習的課題,因為這關系到是否能順利踏入社會且尋找到一份合適滿意的工作。 一個社會新人除了應注意的面試禮節外,在開始進行面談之前及面談結束之后,還有不少必須注意的禮儀。 面談時…

寬帶與流量的關系

流量,一般指的是每秒鐘流經某設備的數據的多少。也就是Byte/Second( 字節每秒)。 比方說1M,這個概念的單位叫bPS(bit Per Second)比特每秒。而事實上經常用另外一個詞來代替描述,也就是帶寬。 而帶寬和流量的換算關系是: 1 By…

PHP函數處理方法總結

call_user_func_array (PHP 4 > 4.0.4, PHP 5, PHP 7) call_user_func_array — 調用回調函數,并把一個數組參數作為回調函數的參數 說明 mixed call_user_func_array ( callable $callback , array $param_arr ) 把第一個參數作為回調函數(callback&…

Django刪除多對多表關系 :

刪除多對多表關系 : # 刪除子表與母表關聯關系,讓小虎不喜歡任何顏色 # 寫法1: child_obj Child.objects.get(name"apollo") colors_obj Colors.objects.all() child_obj.favor child_obj.save() # 寫法2: child_obj Child.objects.get(name"apo…

git push/pull時總需要輸入用戶名密碼的解決方案

在提交項目代碼或者拉代碼的時候,git會讓你輸入用戶名密碼,解決方案:(我們公司用的是gitlab)執行git config --global credential.helper store命令然后git push origin your-branch會讓你輸入用戶名和密碼&#xff0c…

Django源代碼寫DetailView與ListView

基于類的通用視圖 - 展平索引 通用顯示視圖 以下兩個通用的基于類的視圖旨在顯示數據。在許多項目中,它們通常是最常用的視圖。 一、DetailView django.views.generic.detail.DetailView 在執行此視圖時,self.object將包含視圖正在操作的對象。 此視圖…

開源商務智能軟件Pentaho

1 簡介Pentaho是世界上最流行的開源商務智能軟件,以工作流為核心的,強調面向解決方案而非工具組件的,基于java平臺的商業智能(Business Intelligence,BI)套件BI,之所以說是套件是因為它包括一個web server平臺和幾個工具軟件:報表…

chrome用type=file獲取圖片路徑并轉base64字符串

1 html頁面 <div class"col-sm-2" style"height: 200px;margin-top: 14px;"> <input id"photo" name" " type"file" value"選擇圖片" ng-model"photoUrl"> <input type"button&qu…

Python - Django - 中間件 process_exception

process_exception(self, request, exception) 函數有兩個參數&#xff0c;exception 是視圖函數異常產生的 Exception 對象 process_exception 函數的執行順序是按照 settings.py 中設置的中間件的順序的倒序執行 process_exception 函數只在視圖函數中出現異常的時候才執行…

NTV Media Server G3性能測試

Hello&#xff01;大家好&#xff0c;我是資深測試工程師Jackie&#xff0c;今天我來和大家一起對云視睿博的高性能流媒體服務器NTV Media Server G3做一次性能測試。今天測試有一個小目標&#xff0c;那就是驗證在一臺普通的PC機上&#xff0c;NTV Media Server G3的并發能力是…