乙個Flask RESTful的方法

2021-08-26 11:58:09 字數 3268 閱讀 1316

flask-restful 用來快速實現介面服務是比較方便的。但是實際中restful的一套風格不能完全滿足我們的需求,所以請求大多都會帶上引數。引數的解析和驗證成了乙個問題。

並不喜歡把解析和驗證寫在邏輯裡。

flask-restful 提供了 reqparse 來做這件事情。

文件給的例子是這樣的。

parser = reqparse.requestparser()

parser.add_argument('task', type=str)

class todo(resource):

def put(self, todo_id):

args = parser.parse_args()

task =

todos[todo_id] = task

return task, 201

但是覺得還可以更進一步。我的是這樣的。

from flask_restful_ext import validate, field

class todo(resource):

@validate(

field('task', type=unicode, required=true)

)def put(self, todo_id, task):

task =

todos[todo_id] = task

return task, 201

這樣**更簡單。

flask_restful_ext 是我自己寫的乙個模組,來完成這件事情的。

**如下

# __init__.py

from flask_restful_ext.field import field

from flask_restful_ext.tools import parser_maker

from functools import wraps

def validate(*args):

def decorate(func):

fields = args

@wraps(func)

p = parser_maker()

for field in fields:

p.add_argument(field.name, type=field.type, required=field.required, default=field.default)

kwargs.update(p.parse_args())

f = lambda *args, **kwargs: func(*args, **kwargs)

return f(*args, **kwargs)

return decorate

# field.py

class field(object):

def __init__(self, name, type=unicode, required=true, default=none):

self.name = name

self.required = required

self.default = default

self.type = type

# tools.py

from flask_restful import reqparse

def parser_maker():

return reqparse.requestparser()

最後附上完整例子。(大部分是文件上的

from flask import flask

from flask.ext.restful import reqparse, abort, api, resource

from flask_restful_ext import validate, field

todos = ,

'todo2': ,

'todo3': ,

}def abort_if_todo_doesnt_exist(todo_id):

if todo_id not in todos:

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

parser = reqparse.requestparser()

parser.add_argument('task', type=str)

# todo

# show a single todo item and lets you delete them

class todo(resource):

def get(self, todo_id):

abort_if_todo_doesnt_exist(todo_id)

return todos[todo_id]

# 文件例子

# def put(self, todo_id):

# args = parser.parse_args()

# task =

# todos[todo_id] = task

# return task, 201

@validate(

field('task', type=unicode, required=true)

)def put(self, todo_id, task):

task =

todos[todo_id] = task

return task, 201

# todolist

# shows a list of all todos, and lets you post to add new tasks

class todolist(resource):

@validate(field('name'))

def get(self, name):

print name

return todos

#### actually setup the api resource routing here

##api.add_resource(todolist, '/todos')

api.add_resource(todo, '/todos/')

if __name__ == '__main__':

最後講一下。

實現很簡單,功能也很簡單。**的命名,變數名,函式名,類名,還需要不斷斟酌,歡迎吐槽 )

flask restful的請求功能

1.請求解析 flask restful 解析的功能 1.建立請求解析器 請求解析器 requestparser 2.新增引數規則 請求解析器.add argument 引數名,引數規則.3.執行解析 引數物件 請求解析器.parse args 4.獲取引數 引數物件.引數名示例 from flas...

乙個乙個的輸入資料

有兩個需要注意的點 1.while中的內容 whlie ch getchar 0 ch eof 注意這兩個書寫的形式是不一樣的 2.while中就不用再寫getchar了,因為while中本身就有ch getchar 輸入描述 一行,字串行,包含a或b,輸入以字元0結束。輸出描述 一行,乙個字元,a...

乙個決定,乙個轉折

距離2012年9月已經是第四個年頭,對於我,我想這是我這輩子做的第一件我很自豪,很開心的乙個決定,從生物轉向計算機,一直以來,我對自己的期望總是很高,比如說上高中的時候,希望自己至少考個二本,學習個自己喜歡的專業,然後為之奮鬥,有乙個非常激動人心的大學四年,再比如說以後賺很多很多錢,擁有屬於自己的公...