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 ...
随机推荐
- Ethical Hacking - NETWORK PENETRATION TESTING(4)
Targeted packet sniffing airodump-ng --channel[channel] --bssid[bssid] --write[file-name][interface] ...
- Python Ethical Hacking - TROJANS Analysis(3)
BYPASSING ANTI-VIRUS PROGRAMS AV programs detect viruses based on: 1. Code - compare files to huge d ...
- fastjson将json字符串转化为java对象
目录 一.导入一个fastjson的jar包 二.Json字符串格式 三.根据json的格式创建Java类 四.给java类的所有属性添加setter方法 五.转换为java对象 一.导入一个fast ...
- 题解 洛谷 P5465 【[PKUSC2018]星际穿越】
首先考虑题目的性质,发现点向区间连的边为双向边,所以也就可以从一个点向右跳到区间包含该点的点,如图所示: 但事实上向后跳其实是不优的,可以有更好的方法来节省花费: 因此我们发现一个点跳到其前一个区间的 ...
- Spring Boot+MyBatis+MySQL读写分离
读写分离要做的事情就是对于一条sql语句该选择去哪个数据库执行,至于谁来做选择数据库的事情,无非两个,1:中间件(比如MyCat):二:程序自己去做分离操作. 但是从程序成眠去做读写分离最大的弱点就是 ...
- C# WebClient几种常用方法的用法
1.UploadData方法(Content-Type:application/x-www-form-urlencoded) //创建WebClient 对象 WebClient ...
- 究竟什么时候该使用MQ?
究竟什么时候该使用MQ? 原创: 58沈剑 架构师之路 昨天 任何脱离业务的组件引入都是耍流氓.引入一个组件,最先该解答的问题是,此组件解决什么问题. MQ,互联网技术体系中一个常见组件,究竟什么时 ...
- Redis的持久化之RDB
1.什么是Redis的持久化 Redis是一种高级key-value数据库,是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库,所以Redis的所有数据都 ...
- Redis之NoSql入门和概述(一)
1. 为什么用 NoSQL? NoSQL指的是非关系型的数据库,NoSQL也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称.NoSQL用于超大规模数据的存储.这 ...
- Linux图形界面与命令行界面以及用户之间的转换
刚刚不小心进入了命令行界面,,,,,, ALT SHIFE F5 咋回去的呢 sudo startx 但是回去以后默认是root ,,,,,, 所以切换用户 su username//用户名 就可以切 ...