Flask实现RESTful API(注意参数位置解析)
准备工作
首先安装flask_restful三方组件
pip install flask_restful
在models.py中新建一个类,生成表,往里面插入一些数据。(flask要想使用ORM的话需要安装flask_sqlalchemy三方组件,之前已经说过了,此处不再赘述)
然后写了一个urls文件,实例化我们的api,把api对象和app绑定,然后在__init__.py加入绑定的函数
具体实现
api_urls.py

from flask_restful import Api
from myapp.api import * api = Api() def init_api(app):
api.init_app(app) api.add_resource(One,'/one')
api.add_resource(Two,'/two')
api.add_resource(Three,'/three/<int:id>')
api.add_resource(Four,'/four/<int:page>/<int:per_page>')
api.add_resource(Five,'/five')
api.add_resource(Six,'/six')
api.add_resource(Seven,'/seven')

__init__.py

from flask import Flask
from myapp.api_urls import init_api
from myapp.ext import init_ext
from myapp.settings import conf def create_app(env_name):
app = Flask(__name__) app.config.from_object(conf.get(env_name,'debug')) init_ext(app) init_api(app)
return app

输出字段与参数解析的不同实现

from flask import request
from flask_restful import Resource, marshal_with, fields, reqparse
from myapp.models import *
#输出字段
#字典套字符串
one_fields = {
'id':fields.Integer(default=1), #default设置为默认值
'user':fields.String(attribute='name'), #attribute设置为映射到models中的name字段
'content':fields.String,
'hahaha':fields.String(default='lalala')
}
class One(Resource):
@marshal_with(one_fields)
def get(self,*args,**kwargs):
id = int(request.args.get('id'))
data = News.query.get(id)
return data
#字典套列表
two_fields = {
'id':fields.Integer(default=1),
'name':fields.String(default='wusir'),
'hobby':fields.List(fields.String)
}
class Two(Resource):
@marshal_with(two_fields)
def get(self):
hobby = ['阅读','运动','敲代码']
return {'hobby':hobby} #字典套字典
three_fields = {
'id': fields.Integer(default=1),
'name': fields.String(default='alex'),
'content':fields.Nested(one_fields)
}
class Three(Resource):
@marshal_with(three_fields)
def get(self,id):
news = News.query.get(id)
return {'content':news}
#字典套列表,列表再套字典
four_fields = {
'id':fields.Integer(default=1),
'name':fields.String(default='wusir'),
'content':fields.List(fields.Nested(one_fields))
}
class Four(Resource):
@marshal_with(four_fields)
def get(self,page,per_page):
news = News.query.paginate(page,per_page,error_out=False) #分页实现
return {'content':news.items} #参数解析
five_args = reqparse.RequestParser()
five_args.add_argument('id',type=int,required=True,help='id是必填字段,赶紧的填上') #required为True表示是必填字段,help为错误提示信息
five_args.add_argument('name',dest='my_name') #dest表示起别名
five_args.add_argument('hobby',action='append') #action='append'表示字段可以追加写多个
class Five(Resource):
def get(self):
my_args = five_args.parse_args()
print(my_args)
print(my_args.get('hobby'))
return {'msg':'ok'}
six_args = reqparse.RequestParser()
six_args.add_argument('content',location='form')
class Six(Resource):
def get(self):
my_args = six_args.parse_args()
print(my_args)
return {'msg':'get'}
def post(self):
my_args = six_args.parse_args()
print(my_args)
return {'msg':'post'}
seven_args = five_args.copy()
seven_args.replace_argument('id',type=int,help='随便你填不填',required=True)
seven_args.remove_argument('name')
seven_args.remove_argument('hobby')
class Seven(Resource):
def get(self):
my_args = seven_args.parse_args()
print(my_args)
return {'msg':'好了'}

参数解析的位置:

# 从post请求的form里拿参数
parser.add_argument('name', type=int, location='form') # 从get请求的args里拿参数
parser.add_argument('PageSize', type=int, location='args') # 从请求头拿参数 headers
parser.add_argument('User-Agent', location='headers') # 从cookies拿参数
parser.add_argument('session_id', location='cookies') # 获取文件
parser.add_argument('picture', type=werkzeug.datastructures.FileStorage, location='files')

PS:当指定多个解析位置,location 指定为一个列表
文档参考:https://flask-restful.readthedocs.io/en/latest/
Flask实现RESTful API(注意参数位置解析)的更多相关文章
- Flask之RESTFul API前后端分离
Flask之RESTFul API前后端分离 一:虚拟环境搭建的两种方式 1 pipenv的使用 pip install --user pipenv安装pipenv在用户目录下 py -m site ...
- flask开发restful api系列(8)-再谈项目结构
上一章,我们讲到,怎么用蓝图建造一个好的项目,今天我们继续深入.上一章中,我们所有的接口都写在view.py中,如果几十个,还稍微好管理一点,假如上百个,上千个,怎么找?所有接口堆在一起就显得杂乱无章 ...
- flask开发restful api
flask开发restful api 如果有几个原因可以让你爱上flask这个极其灵活的库,我想蓝图绝对应该算上一个,部署蓝图以后,你会发现整个程序结构非常清晰,模块之间相互不影响.蓝图对restfu ...
- flask开发restful api系列(6)-配置文件
任何一个好的程序,配置文件必不可少,而且非常重要.配置文件里存储了连接数据库,redis的用户密码,不允许有任何闪失.要有灵活性,用户可以自己配置:生产环境和开发环境要分开,最好能简单的修改一个东西, ...
- Flask (五) RESTful API
RESTful API 什么是REST 一种软件架构风格.设计风格.而不是标准,只是提供了一组设计原则和约束条件.它主要用户客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易 ...
- 使用 Flask 实现 RESTful API
原文出处: Luis Rei 译文出处:nummy 简介 首先,安装Flask 1 pip install flask 假设那你已经了解RESTful API的相关概念,如果不清楚,可以阅 ...
- 使用 Python 和 Flask 设计 RESTful API
近些年来 REST (REpresentational State Transfer) 已经变成了 web services 和 web APIs 的标配. 在本文中我将向你展示如何简单地使用 Pyt ...
- flask开发restful api系列(7)-蓝图与项目结构
如果有几个原因可以让你爱上flask这个极其灵活的库,我想蓝图绝对应该算上一个,部署蓝图以后,你会发现整个程序结构非常清晰,模块之间相互不影响.蓝图对restful api的最明显效果就是版本控制:而 ...
- flask开发restful api系列(1)
在此之前,向大家说明的是,我们整个框架用的是flask + sqlalchemy + redis.如果没有开发过web,还是先去学习一下,这边只是介绍如果从开发web转换到开发移动端.如果flask还 ...
- Python使用Flask实现RESTful API,使用Postman工具、requests库测试接口
RESTful是一种API设计规范.在RESTful架构中,主要使用POST,DELETE,PUT和GET四种HTTP请求方式分别对指定的URL资源进行增删改查操作. RESTful之前的做法: /u ...
随机推荐
- Linux find 查找 并删除文件 杀掉进程
find 默认在当前 即 . 目录下查找 du 文件名 / 目录 # 查看文件占用内存大小 1. 按照文件名查找 find / -name qwe # qwe为文件名 find / -name *qw ...
- python基础算法
一.简介 定义和特征 定义:算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时 ...
- .Net Core 项目开发中的Errors,Exceptions
这个错误是在连接数据库的时候,没有找到对应的表, namespace TodoApi.Models { public class TodoContext : DbContext { public To ...
- APP自动化 -- contexts(上下文切换)
一.上下文是什么? 1.解释 1)在混合型APP中包含了 原生页面 和 H5页面,如果需要进入APP内嵌的H5页面里面去操作就需要先切换进去,如果要继续回到原生页面操作就需要切回来. 2)这个就像是 ...
- 记node,elementui,formidable上传图片
卡了很久甚至心态爆炸,搞了半天才能成功上传图片,结果图片上传的位置也有问题.头大 https://www.jianshu.com/p/3a61318c24d1 先是参考这个来弄好大致的部署. 然后中途 ...
- 学习python的几个资料网站
菜鸟教程 https://www.runoob.com/python3/python3-tutorial.html https://www.runoob.com/python/python-tutor ...
- PHP fwrite() 函数
定义和用法 fwrite() 函数将内容写入一个打开的文件中. 函数会在到达指定长度或读到文件末尾(EOF)时(以先到者为准),停止运行. 如果函数成功执行,则返回写入的字节数.如果失败,则返回 FA ...
- 一个轻量级的基于RateLimiter的分布式限流实现
上篇文章(限流算法与Guava RateLimiter解析)对常用的限流算法及Google Guava基于令牌桶算法的实现RateLimiter进行了介绍.RateLimiter通过线程锁控制同步,只 ...
- LVS-DR:实现VIP和RIP不在同一个网络中的集群
目录 LVS-DR:实现VIP和RIP不在同一个网络中集群 1. router上配置ip转发,并测试 2. DR上配置VIP和转发规则 3. RS上配置arp内核参数和VIP 4. 配置HTTP访问 ...
- 什么是Cookie、Session、Token?
原文:https://mp.weixin.qq.com/s/pWXhI_ppKhtOP-Xf_SpuDA 来源:后厂村码农 在了解这三个概念之前我们先要了解 HTTP 是无状态的Web服务器,什么是无 ...