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 ...
随机推荐
- [redis] -- 缓存雪崩和缓存穿透、缓存击穿问题解决方案篇
缓存雪崩 缓存同一时间大面积的失效,所以,后面的请求都会落到数据库上,造成数据库短时间内承受大量请求而崩掉 解决方案 事前:尽量保证整个redis集群的高可用性,发现机器宕机尽快补上.选择合适的内存淘 ...
- org.apache.commons.net.ftp.FTPConnectionClosedException: Connection closed without indication
Ftp问题 最近遇到了ftp读取中文乱码的问题,代码中使用的是FtpClient.google一下找到了解决方案. FTP协议里面,规定文件名编码为iso-8859-1,FTP类中默认的编码也是这个. ...
- IDEA中项目的两种打包方式
本文主要介绍在IDEA中怎么打包,及可以用哪种方式打包. 若是有指正或补充的,欢迎留言~ ٩(●̮̃•)۶ 接下来进入正题: IDEA中打包需要先进行配置,so,我们先打开<abbr titl ...
- springboot + ehcache
一.使用 springboot + ehcache本地堆缓存实现相应功能 1.引入ehcache的jar包 2.创建ehcache的xml配置文件 <?xml version="1.0 ...
- Day01_虚拟化架构与系统部署
学于千峰教育开源课程 感恩 千峰教育官网 b站在线视频 前言:本人所使用的操作系统是MacOS 使用的虚拟机软件为parallels desktop 本章结构 构建桌面端虚拟环境 虚拟机的概述 VMa ...
- 《闲扯Redis九》Redis五种数据类型之Set型
一.前言 Redis 提供了5种数据类型:String(字符串).Hash(哈希).List(列表).Set(集合).Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要. ...
- PHP array_pop() 函数
实例 删除数组中的最后一个元素: <?php$a=array("red","green","blue");array_pop($a); ...
- PHP array_udiff() 函数
实例 比较两个数组的键值(使用用户自定义函数比较键值),并返回差集: <?phpfunction myfunction($a,$b){if ($a===$b){return 0;}return ...
- Boolean源码解剖学
一.类继承 Boolean的源码类定义部分如下: 1 public final class Boolean implements java.io.Serializable, 2 Comparable& ...
- 使用Flask开发简单接口(1)--GET请求接口
前言 很多想学习接口测试的同学,可能在最开始的时候,常常会因没有可以练习的项目而苦恼,毕竟网上可以练习的接口项目不多,有些可能太简单了,有些可能又太复杂了,或者是网上一些免费接口请求次数有限制,最终导 ...