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 ...
随机推荐
- Trie——解决字符串搜索、异或最值问题
Trie--解决字符串搜索.异或最值问题 在说到Trie之前,我们设想如下问题: 给我们1e5个由小写字母构成的不重复的字符串,每个字符串长度不超过6,之后是1e5次查询操作,每次给我们一个字符串,要 ...
- Python基础点记录1
1 变量:一个变量就是一个单词,只有一个单一的值 1 Python里面的数据类型 interage , floats , booleans , String等 2 Python是一个区分大小写的语言 ...
- GitHub 热点速览 Vol.29:程序员资料大全
作者:HelloGitHub-小鱼干 摘要:有什么资料比各种大全更吸引人的呢?先马为敬,即便日后"挺尸"收藏夹,但是每个和程序相关的大全项目都值得一看.比如国内名为小傅哥整理的 J ...
- Android 性能优化---布局优化
Android 性能优化---布局优化 Android 布局绘制原理 布局加载过程 setContentView() --> inflate() -- > getLayout()(I/O操 ...
- PD快充和QC快充
参考链接:https://zhidao.baidu.com/question/246420719602653564.html PD快充协议 PD即USB Power Delivery Specific ...
- 11-13 模块_collections(不太重要)&time&random&os
random:随机数模块 os:和操作系统打交道的模块 sys:和Python解释器打交道的模块 序列化模块:Python中的数据类型和str转换的模块 http://www.cnblogs.com/ ...
- Python os.ttyname() 方法
概述 os.ttyname() 方法用于返回一个字符串,它表示与文件描述符fd 关联的终端设备.如果fd 没有与终端设备关联,则引发一个异常.高佣联盟 www.cgewang.com 语法 ttyna ...
- 字典内置函数&方法
字典内置函数&方法 Python字典包含了以下内置函数:高佣联盟 www.cgewang.com 序号 函数及描述 1 cmp(dict1, dict2)比较两个字典元素. 2 len(dic ...
- PDOStatement::errorInfo
PDOStatement::errorInfo — 获取跟上一次语句句柄操作相关的扩展错误信息(PHP 5 >= 5.1.0, PECL pdo >= 0.1.0) 说明 语法 array ...
- 2020牛客暑假多校训练营 第二场 H Happy Triangle set 线段树 分类讨论
LINK:Happy Triangle 这道题很容易. 容易想到 a+b<x a<x<b x<a<b 其中等于的情况在第一个和第三个之中判一下即可. 前面两个容易想到se ...