准备工作

首先安装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/

Fake it,till you make it

Flask实现RESTful API(注意参数位置解析)的更多相关文章

  1. Flask之RESTFul API前后端分离

    Flask之RESTFul API前后端分离 一:虚拟环境搭建的两种方式 1 pipenv的使用 pip install --user pipenv安装pipenv在用户目录下 py -m site ...

  2. flask开发restful api系列(8)-再谈项目结构

    上一章,我们讲到,怎么用蓝图建造一个好的项目,今天我们继续深入.上一章中,我们所有的接口都写在view.py中,如果几十个,还稍微好管理一点,假如上百个,上千个,怎么找?所有接口堆在一起就显得杂乱无章 ...

  3. flask开发restful api

    flask开发restful api 如果有几个原因可以让你爱上flask这个极其灵活的库,我想蓝图绝对应该算上一个,部署蓝图以后,你会发现整个程序结构非常清晰,模块之间相互不影响.蓝图对restfu ...

  4. flask开发restful api系列(6)-配置文件

    任何一个好的程序,配置文件必不可少,而且非常重要.配置文件里存储了连接数据库,redis的用户密码,不允许有任何闪失.要有灵活性,用户可以自己配置:生产环境和开发环境要分开,最好能简单的修改一个东西, ...

  5. Flask (五) RESTful API

    RESTful API 什么是REST 一种软件架构风格.设计风格.而不是标准,只是提供了一组设计原则和约束条件.它主要用户客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易 ...

  6. 使用 Flask 实现 RESTful API

    原文出处: Luis Rei   译文出处:nummy 简介 首先,安装Flask     1 pip install flask 假设那你已经了解RESTful API的相关概念,如果不清楚,可以阅 ...

  7. 使用 Python 和 Flask 设计 RESTful API

    近些年来 REST (REpresentational State Transfer) 已经变成了 web services 和 web APIs 的标配. 在本文中我将向你展示如何简单地使用 Pyt ...

  8. flask开发restful api系列(7)-蓝图与项目结构

    如果有几个原因可以让你爱上flask这个极其灵活的库,我想蓝图绝对应该算上一个,部署蓝图以后,你会发现整个程序结构非常清晰,模块之间相互不影响.蓝图对restful api的最明显效果就是版本控制:而 ...

  9. flask开发restful api系列(1)

    在此之前,向大家说明的是,我们整个框架用的是flask + sqlalchemy + redis.如果没有开发过web,还是先去学习一下,这边只是介绍如果从开发web转换到开发移动端.如果flask还 ...

  10. Python使用Flask实现RESTful API,使用Postman工具、requests库测试接口

    RESTful是一种API设计规范.在RESTful架构中,主要使用POST,DELETE,PUT和GET四种HTTP请求方式分别对指定的URL资源进行增删改查操作. RESTful之前的做法: /u ...

随机推荐

  1. three.js 将图片马赛克化

    这篇郭先生来说说BufferGeometry,类型化数组和粒子系统的使用,并且让图片有马赛克效果(同理可以让不清晰的图片清晰化),如图所示.在线案例点击博客原文 1. 解析图片 解析图片和上一篇一样 ...

  2. 二分图&网络流初步

    链接 : 最小割&网络流应用 EK太低级了,不用. 那么请看:#6068. 「2017 山东一轮集训 Day4」棋盘,不用EK你试试? dinic模板及部分变形应用见zzz大佬的博客:网络流学 ...

  3. ‘100%’wuxiao

    有时候设置控件的width:’100%‘无效,  群友解释, 因为父控件的大小要靠自空间撑起来,确定    ??????

  4. Go语言系列之手把手教你撸一个ORM(一)

    项目地址:https://github.com/yoyofxteam/yoyodata 欢迎星星,感谢 前言:最近在学习Go语言,就出于学习目的手撸个小架子,欢迎提出宝贵意见,项目使用Mysql数据库 ...

  5. 旧的成功的AndroidManifest.xml

    <?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="htt ...

  6. 【评价指标】详解F1-score与多分类MacroF1&MicroF1

    文章来自:一个宝藏微信公众号[机器学习炼丹术] 基本概念 首先,要背住的几个概念就是:accuracy,precision,recal, TP,FP,TN,FN TP:true positive.预测 ...

  7. ubuntu的docker安装

    安装docker 安装 介绍一下docker 的中央仓库们 Docker官方中央仓库: https://hub.docker.com/ 因为docker 网站在国外所以访问速度和你的运气有关还有网络. ...

  8. JPA第三天

    学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"springdata"获取视频和教程资料! b站在线视 ...

  9. 史蒂夫-乔布斯(Steve Jobs)斯坦福大学演讲稿(中英对照)

    这是苹果公司和Pixar动画工作室的CEO Steve Jobs于2005年6月12号在斯坦福大学的毕业典礼上面的演讲稿. Thank you. I'm honored to be with you ...

  10. numpy第三方库

    # 导入numpy 并赋予别名 np import numpy as np # 创建数组的常用的几种方式(列表,元组,range,arange,linspace(创建的是等差数组),zeros(全为 ...