flask-restful基础
flask-restful基本使用
基本使用
from flask_restful import Api,Resource,reqparse,inputs
from flask import Flask,render_template, url_for # 注册
app = Flask(__name__)
api = Api(app) # 类继承自Resource
class LoginView(Resource):
def post(self):
return {"username":"zhiliao"} # 这里可字典 api.add_resource(LoginView,'/login/',"/register/") # 可以写多个路由
url_for("loginview") # 注意默认情况下会把类名转换为小写
参数验证
add_argument可以指定这个字段的名字,这个字段的数据类型等。具体参数如下:
1. default:默认值,如果这个参数没有值,那么将使用这个参数指定的值。
2. required:是否必须。默认为False,如果设置为True,那么这个参数就必须提交上来。
3. type:这个参数的数据类型,如果指定,那么将使用指定的数据类型来强制转换提交上来的值。
4. choices:选项。提交上来的值只有满足这个选项中的值才符合验证通过,否则验证不通过。
5. help:错误信息。如果验证失败后,将会使用这个参数指定的值作为错误信息。
6. trim:是否要去掉前后的空格。其中的type,可以使用python自带的数据类型(但参数必须有一个,例如str等),同时flask_restful.inputs提供了一些特定的数据类型来强制转换。比如一些常用的:
1. url:会判断这个参数的值是否是一个url,如果不是,那么就会抛出异常。
2. regex:正则表达式。
3. date:将这个字符串转换为datetime.date数据类型。如果转换不成功,则会抛出一个异常。
class LoginView(Resource):
def post(self):
from datetime import date
parser = reqparse.RequestParser()
parser.add_argument('birthday',type=inputs.date,help='生日字段验证错误!') # 验证是否是日期
parser.add_argument('telphone',type=inputs.regex(r'1[3578]\d{9}'))
# 正则验证
parser.add_argument('home_page',type=inputs.url,help='个人中心链接验证错误!')
# url验证
parser.add_argument('username',type=str,help='用户名验证错误!',required=True)
# parser.add_argument('age',type=int,help='年龄验证错误!')
# 验证是否是数字
parser.add_argument('gender',type=str,choices=['male','female','secret']) # 验证是否在选项中
args = parser.parse_args() # 进行验证并返回结果
print(args)
return ...
Serialization
通过使用序列化可以将表信息直接转化为json字符串
from flask_restful import marshal_with, Resource, fields class ProfileView(Resource):
resource_fields = {
'username': fields.String,
'age': fields.Integer,
'school': fields.String
} @marshal_with(resource_fields)
def get(self,user_id):
user = User.query.get(user_id)
return user
序列化属性
resource_fields = {
'education': fields.String(attribute='school')
} # 表字段为school 但想输出的key 为education
attribute:表字段重命名
resource_fields = {
'age': fields.Integer(default=18)
}
default: 默认值
class ArticleView(Resource):
resource_fields = {
'aritlce_title':fields.String(attribute='title'),
'content':fields.String,
'author': fields.Nested({ # 多对一
'username': fields.String,
'email': fields.String
}),
'tags': fields.List(fields.Nested({ # 多对多
'id': fields.Integer,
'name': fields.String
})),
'read_count': fields.Integer(default=80)
} @marshal_with(resource_fields)
def get(self,article_id):
article = Article.query.get(article_id)
return article
多对一&多对多结构
其他
配合蓝图使用
在蓝图中,如果使用`flask-restful`,那么在创建`Api`对象的时候(api = Api(app)),传入蓝图对象。
渲染模板
返回response对象
如果继承了Resource但是又想返回response对象通过@api.representation('text/html')
from flask import Blueprint,render_template,make_response
@api.representation('text/html')
def output_html(data,code,headers):
# 函数名不需要关联,如果发现继承Resource的视图返回的是response对象会自动找到这里
print(data) # 这个data为render_template传入的index.html
# 在representation装饰的函数中,必须返回一个Response对象
resp = make_response(data)
return resp class ListView(Resource):
def get(self):
return render_template('index.html')
api.add_resource(ListView,'/list/',endpoint='list')
示例
flask-restful基础的更多相关文章
- Python Flask Restful
Flask Restful 1.flask restful 在flask基础上进行一些封装,主要用于实现restful接口 2.restful的理解 1)URI(统一资源标识符):每一个URI代表一 ...
- SpringCloud系列二:Restful 基础架构(搭建项目环境、创建 Dept 微服务、客户端调用微服务)
1.概念:Restful 基础架构 2.具体内容 对于 Rest 基础架构实现处理是 SpringCloud 核心所在,其基本操作形式在 SpringBoot 之中已经有了明确的讲解,那么本次为 了清 ...
- 使用swagger 生成 Flask RESTful API
使用swagger 生成 Flask RESTful API http://www.voidcn.com/article/p-rcvzjvpf-e.html swagger官网 https://swa ...
- 知了课堂 Python Flask零基础 笔记整理
目录 起步 安装Python2.7: Python虚拟环境介绍与安装: pip安装flask: 认识url: URL详解 web服务器和应用服务器以及web应用框架: Flask 第一个flask程序 ...
- Flask restful源码分析
Flask restful的代码量不大,功能比较简单 参见 http://note.youdao.com/noteshare?id=4ef343068763a56a10a2ada59a019484
- 如何用rflask快速初始化Flask Restful项目
如何用rflask快速初始化Flask Restful项目 说明 多啰嗦两句 我们在创建flask项目的时候,使用pycharm创建出来的项目比较简陋,而且随着项目的功能完善,项目目录结构会比较多,多 ...
- [flask]Restful接口测试简单的应用
#!/usr/bin/env python # -*- coding: utf-8 -*- # @Author : shenqiang from flask import Flask,make_res ...
- 超实用的Flask入门基础教程,新手必备!
Flask入门基础教程 Flask简介 Flask是一个轻量级的可定制框架,使用Python语言编写,较其他同类型框架更为灵活.轻便.安全且容易上手.它可以很好地结合MVC模式进行开发,开发人员分工合 ...
- 快速创建Flask Restful API项目
前言 Python必学的两大web框架之一Flask,俗称微框架.它只需要一个文件,几行代码就可以完成一个简单的http请求服务. 但是我们需要用flask来提供中型甚至大型web restful a ...
- python Flask restful框架
框架地址:https://github.com/flask-restful/flask-restful 文档:http://flask-restful.readthedocs.io/en/0.3.5/ ...
随机推荐
- ZOJ3954 Seven-Segment Display
题意: emmmm见原题吧 分析: 这也是当时省赛选拔的题,场上以为是大模拟,然后没敢写...补题发现是道水题··· 因为每一列的顺序不一定,但是行是一定的.所以只要把每一列组成一个数字,然后弄两个集 ...
- WebFlux01 webflux概念、异步servlet、WebFlux意义
1 概念 待更新...... 2 异步servlet 2.1 同步servlet servlet容器(如tomcat)里面,每处理一个请求会占用一个线程,同步servlet里面,业务代码处理多久,se ...
- ubuntu 设置虚拟机和主机在同一网段
一.在VMware中将网络连接方式设置为桥接 1.打开VM菜单栏->Settings 2.在弹出的Virtual Machine Setting对话框中点击Network Adapter,在右边 ...
- CompositePattern(23种设计模式之一)
设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大 ...
- 专题1-MMU-lesson1-MMU功能解析
1.Memory Management Unit(存储器管理单元) 单片机与ARM在硬件体系上的一些区别:其中就有MMU的区别. 虚拟地址的使用 把p1.c复制成P2.c,把变量a改成b,再进行编译看 ...
- web大文件上传控件-设置附加参数-Xproer.HttpUploader6
自定义附加字段在up6.js中定义,也可以不用定义: 注意: 1.附加字段必须是字符串类型. 2.如果附加字段的值包含中文,在上传前必须使用encodeURIComponent进行编码. 在引 ...
- C++中的Trivial 、POD、non-POD和Standard Layout概念
POD types non-POD types Standard Layout types A Formal Definition Informally, a standard layout clas ...
- QT背景
Qt是一个跨平台的C++图形用户界面应用程序框架.它为应用程序开发者提供建立基于window界面所需的功能. Qt是诺基亚公司的一个产品.1996年,Qt进入商业领域,已成为全世界范围内数千种成功的应 ...
- 异步串行通信的XON与XOFF
在单片机的异步串行通信中,putchar函数中的实现中反复用到了XON和XOFF,定义原型如下: #define XON 0x11#define XOFF 0x13 查找ASCII码表,这两个对应的是 ...
- 转Delphi中XLSReadWrite控件的使用(3) 读和写Excel
unit OpExcell; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Fo ...