使用 flask restful 來開發API

2021-09-03 02:36:11 字數 3969 閱讀 2678

在雙十一買了阿里云云小蜜的培訓課程,花了幾天學了一下,不過考了兩次都沒有考過,但是能夠熟練使用雲小蜜來搭建業務了,為了整合一些外部資料,例如天氣,交通,電影啥的,需要封裝處理一下第三方api或者呼叫自己的資料庫。最後的需求就是變成restful api了,可以把這個請求位址直接放到雲小蜜裡邊。

rest的名稱"表現層狀態轉化"中,省略了主語。「表現層"其實指的是"資源」(resources)的"表現層"。

所謂"資源",就是網路上的乙個實體,或者說是網路上的乙個具體資訊。它可以是一段文字、一張、一首歌曲、一種服務,總之就是乙個具體的實在。你可以用乙個uri(統一資源定位符)指向它,每種資源對應乙個特定的uri。要獲取這個資源,訪問它的uri就可以,因此uri就成了每乙個資源的位址或獨一無二的識別符。

客戶端用到的手段,只能是http協議。具體來說,就是http協議裡面,四個表示操作方式的動詞:get、post、put、delete。它們分別對應四種基本操作:get用來獲取資源,post用來新建資源(也可以用於更新資源),put用來更新資源,delete用來刪除資源。

# -*- coding:utf-8 -*-

import os

from flask import flask, abort

from flask_restful import reqparse, abort, api, resource

from flask_restful import fields, marshal

from resources import weather_info

tasks = [

,]task_fields =

def abort_if_todo_doesnt_exist(todo_id):

"""如果資料庫(記憶體)中沒有儲存 todo_id 標識的資料 返回404 否則返回該條資料

:param todo_id: 標識id

:return: todo_id 標識的資料

"""task = filter(lambda t: t['todo_id'] == todo_id, tasks)

if len(task) == 0:

abort(404, message="todo doesn't exist".format(todo_id=todo_id))

else:

return task[0]

class task(resource):

def __init__(self):

# 使用 requestparser來 解析傳進來的引數

self.reqparse = reqparse.requestparser()

self.reqparse.add_argument('title', type=str, location='json')

self.reqparse.add_argument('description', type=str, location='json')

self.reqparse.add_argument('done', type=bool, location='json')

super(task, self).__init__()

def get(self, todo_id):

task = abort_if_todo_doesnt_exist(todo_id)

# 使用 marshal 按照 task_fields的定義來包裝task

return marshal(task, task_fields), 201

def delete(self, todo_id):

task = abort_if_todo_doesnt_exist(todo_id)

tasks.remove(task)

# del task

return marshal(tasks, task_fields), 204

def put(self, todo_id):

new_task = abort_if_todo_doesnt_exist(todo_id)

args = self.reqparse.parse_args()

print(args)

for k, v in args.iteritems():

if v is not none:

new_task[k] = v

print(new_task)

return marshal(new_task, task_fields), 201

class tasklist(resource):

def __init__(self):

self.reqparse = reqparse.requestparser()

self.reqparse.add_argument('todo_id', type=int, required=true,

help='no todo id provided', location='json')

self.reqparse.add_argument('title', type=str, required=true,

help='no task title provided', location=['json'])

self.reqparse.add_argument('description', type=str, default="", location='json')

self.reqparse.add_argument('done', type=bool, default=false, location='json')

super(tasklist, self).__init__()

def get(self):

return marshal(tasks, task_fields), 201

def post(self):

args = self.reqparse.parse_args()

new_task = {}

for k, v in args.iteritems():

if v is not none:

new_task[k] = v

return marshal(new_task, task_fields), 202

class index(resource):

def get(self):

weinfo = weather_info.getweatherinfo("beijing")

return , 200

class weatherinfo(resource):

def __init__(self):

self.reqparse = reqparse.requestparser()

self.reqparse.add_argument("city", required=true,

help='no city provided')

def post(self):

args = self.reqparse.parse_args()

print(args)

weinfo = weather_info.getweatherinfo(args['city'])

return , 200

# 新增restful api的 解析路徑

api.add_resource(tasklist, '/todo/api/v1.0/tasks', endpoint='tasks')

# todo_id 要能對應到解析函式的變數名稱

api.add_resource(task, '/todo/api/v1.0/tasks/', endpoint='task')

api.add_resource(index, '/', endpoint='index')

#api.add_resource(weatherinfo, '/weather', endpoint='weather')

if __name__ == '__main__':

# 執行api介面程式 可以指定埠及 host

flask restful使用講解

flask restful筆記 安裝 flask restful需要在flask 0.8以上的版本,在python2.6或者python3.3上執行。通過pip install flask restful即可安裝。基本使用 1.從 flask restful 中匯入 api 來建立乙個 api 物件...

flask restful使用總結

flask restful是乙個用於快速建立restful api介面的flask擴充套件。使用flask restful可以很快速方便地建立乙個restful風格的介面應用程式。1 安裝 pip install flask restful 2 全部 from flask import flask ...

Flask RESTful 的介紹和基本使用

flask restful 是乙個 flask 擴充套件,它新增了快速構建 rest api 的支援。環境安裝 終端執行 pip install flask restful文件 點我檢視官方文件 點我檢視中文翻譯 構建restapi 使用 flask restful 構建restapi只需要進行三步...