flask jinjia,flask中文网
Restful api是一组前端和后端通信的规范。使用该规范可以使前端和后端开发更容易。
草案
使用http或https。
数据传输格式
数据传输的格式应该都是用json而不是xml。
Url链接
在url链接中,不能有动词,只能有名词。而且对于一些名词,如果有复数,那么后面要加s。
例如,您应该使用/articles/而不是/get_article/来获取文章列表。
HTTP请求方法
GET:从服务器获取资源(常用)
POST:在服务器上创建新资源(公共)
PUT:更新服务器上的资源。(客户端提供所有更改的数据)
补丁:更新服务器上的资源。(客户端只提供需要更改的属性)
删除:从服务器中删除资源。
状态代码
状态代码
本地描述
形容
200
好
服务器成功响应了客户端的请求
名流
无效请求
用户请求中有错误,服务器没有创建或修改数据。
401
未经授权的
用户无权访问此请求。
403
被禁止的
由于某种原因,访问此请求被禁止。
404
未发现
用户发送的请求的url不存在。
406
不接受
服务器没有接收到用户的请求(例如,服务器期望客户端发送某个字段,但是它没有)
500
内部服务器错误
服务器内部错误,如bug。
安装flask-restful插件
pip安装烧瓶-restful
定义Restful视图
如果使用flask-restful,在定义视图函数时,应该从flask_restful继承。资源类,然后根据当前请求的方法定义相应的方法。例如,如果期望客户机使用get方法发送请求,则定义get方法,如果期望客户机使用post方法发送请求,则定义post方法。类似于MethodView。
也可以在url中传递参数:
url也可以是多个:
验证参数Flask-Restful插件提供了一个类似WTForm的包来验证提交的数据是否合法,这个包叫做reqparse。以下是基本用法
parser=reqparse。RequestParser()
Parser.add _ argument(用户名,type=str,required=true,help=用户名验证错误)
arg=parser . parse _ args()Add _ argument可以指定这个字段的名称,这个字段的数据类型等。
默认值:默认值。如果该参数没有值,将使用该参数指定的值。
必选:是否必要。默认值为False。如果设置为True,则必须提交该参数。
Type:该参数的数据类型。如果指定,指定的数据类型将用于转换提交的值。
选择:选项。只有当提交的值满足该选项中的值时,验证才能通过;否则,验证失败。
帮助:错误消息。如果验证失败,此参数指定的值将用作错误消息。
Trim:是否删除前后的空格。其中可以使用python自带的一些数据类型或者flask_restful.inputs下的一些特定数据类型来强制转换。比如一些常用的:
Url:它将确定这个参数的值是否是url,如果不是,它将抛出一个异常。
Regex:正则表达式。
Date:将此字符串转换为datetime.date数据类型。如果转换不成功,将引发异常。
因为添加参数required=True需要用户名字段,如果客户端没有通过这个字段,就会提示错误,这个错误提示就是我们自己的帮助——‘用户名验证错误’
.
from flask_restful导入Api,资源,请求解析,输入
app=Flask(__name__)
app . config . from _对象(配置)
api=Api(应用程序)
类注册视图(资源):
定义发布(自己):
parser=reqparse。RequestParser()
Parser.add _ argument(用户名,type=str,required=true,help=用户名字段验证错误)
Parser.add _ argument(生日,type=inputs.date,required=true,help=生日字段验证错误)
Parser.add _ argument (gender ,type=str,choices=(男性,女性),help=性别字段验证错误)
Parser.add _ argument (money ,type=int,trim=true,default=0,help=金额字段验证错误)
parser.add_argument(phone ,type=inputs。regex(r 1[3458]\ d { 9 } ),help=手机字段验证错误)
parser.add_argument(blog ,type=inputs.url,help=博客地址字段验证错误)
args=parser.parse_args()
打印(参数)
返回"成功"
api.add_resource(RegisterView,/register/,endpoint=register )
.
长颈瓶休息标准化返回参数对于一个视图函数,我们可以指定好一些参数用于返回,在规范中要求:即使这个参数没有值也应该返回,返回一个没有人回去
.
从烧瓶_restful导入Api,资源,字段,marshal _与
api=Api(应用程序)
类文章视图(资源):
resource_field={ #先定义好返回哪些参数
名称:字段。字符串,井号键参数的数据类型
年龄:字段。字符串,
学校:田地。线
}
@marshal_with(resource_field) #利用与.一起编组装饰器传入定义好的返回参数
定义获取(自身):
返回{}就算这里返回个空字典,也会把定义好的参数返回
api.add_resource(文章视图,/article/,端点=文章).
类文章视图(资源):
resource_field={
名称:字段。字符串,
年龄:字段。字符串,
学校:田地。线
}
@marshal_with(resource_field)
定义获取(自身):
return {name: heboan , age: 18}
.
当使用对象关系映射(对象关系映射)模型或者自定义的的模型的时候,它会自动的获取模型中相应的字段,生成数据数据,然后返回给客户端
类配置文件视图(资源):
resource _ fields={
用户名:字段。字符串,
年龄:字段。整数,
学校:田地。线
}
@ marshal _ with(resource _ field)
定义get(self,user_id):
user=User.query.get(user_id)
返回用户在得到方法中,返回用户的时候,flask_restful会自动的读取用户模型上的用户名,年龄以及学校属性。组装成一个数据格式的字符串返回给客户端
重名属性如果我们想把面向公众的字段名称不用与内部的属性名。使用属性可以配置这种属性,比如现在想要返回用户。学校中的值,但是在返回给外面的时候,想以教育返回回去,那么可以这样写
resource _ fields={
"教育":领域。字符串(属性=学校)
}
默认值在返回一些字段的时候,有时候可能没有值,那么这时候可以在指定田地(复数);场;域;字段的时候给定一个默认值,示例代码如下
resource _ fields={
年龄:字段。整数(默认值=18)
}复杂的结构有时候想要在返回的数据格式中,形成比较复杂的结构。那么可以使用一些特殊的字段来实现。比如要在一个字段中放置一个列表,那么可以使用字段。列表,比如在一个字段下面又是一个字典,那么可以使用字段。嵌套的。以下将讲解下复杂结构的用法:
定义数据库结构:
用户表,文章表,标签表,因为文章与标签是多对多的关系,因此需要一个中间表来关联文章标签
从外部导入数据库
类用户(数据库。型号):
__tablename__=用户
id=db .列(db .整数primary_key=True,autoincrement=True)
用户名=db .列(db .字符串(50),可空=假)
类文章(db .型号):
__tablename__=article
id=db .列(db .整数primary_key=True,autoincrement=True)
title=db .列(db .字符串(50),可空=假)
内容=db .列(db .文本,可空=假)
user_id=db .列(db .整数,数据库.外键( user.id ))
author=db.relationship(User ,backref=articles )
tags=db.relationship(Tag ,secondary=article_tag )
类别标签(数据库。型号):
__tablename__=tag
id=db .列(db .整数primary_key=True,autoincrement=True)
name=db .列(db .字符串(50),可空=假)
article_tag=db .表格(
文章_标签,
数据库.列(文章id ,数据库.整数,数据库.ForeignKey(article.id )。
数据库.列(标签标识,数据库.整数,数据库.外键( tag.id ))
)
模型添加测试数据
.
从模型导入用户、文章、标签
@app.route(/)
定义索引():
用户=用户(用户名=heboan )
tag_1=Tag(name=Linux )
tag_2=Tag(name=Python )
文章=文章(title=python自动化运维,内容=人生苦短,我用python……)
文章.标签.附加(标签_1)
文章.标签.附加(标签_2)
文章作者=用户
db.session.add(文章)
db.session.commit()
返回数据插入成功!
视图当我们全部使用字段。线
类文章视图(资源):
resource _ fields={
标题:字段。字符串,
"内容":字段。字符串,
"作者":字段。字符串,
标签:字段。线
}
@ marshal _ with(resource _ field)
定义获取(自身):
article=db.session.query(文章)。获得(1)
退货商品
api.add_resource(文章视图,/article/,端点=文章)使用字段。嵌套、字段。目录
类文章视图(资源):
resource _ fields={
标题:字段。字符串,
"内容":字段。字符串,
"作者":字段。嵌套({ #字典里面嵌套字典使用字段。嵌套的
用户名:字段。线
}),
标签:字段。列表(字段。嵌套({ #标签是列表,使用字段列表类型然后嵌套字段。嵌套的
id :字段。整数,
名称:字段。线
}))
}
@ marshal _ with(resource _ field)
定义获取(自身):
article=db.session.query(文章)。获得(1)
打印(文章标题)
退货商品
api.add_resource(文章视图,/article/,端点=文章)
在蓝图使用使用烧瓶瑞斯福新建一个文章。巴拉圭
从烧瓶导入蓝图
从烧瓶_restful导入Api,资源,字段,marshal _与
从外部导入数据库
从模型导入文章
article_bp=Blueprint(article ,__name__,url_prefix=/article )
api=Api(article_bp) #这里使用文章_bp了
类文章视图(资源):
resource _ fields={
标题:字段。字符串,
"内容":字段。字符串,
"作者":字段。嵌套({
用户名:字段。线
}),
标签:字段。列表(字段。嵌套({
id :字段。整数,
名称:字段。线
}))
}
@ marshal _ with(resource _ field)
定义获取(自身):
article=db.session.query(文章)。获取(1)
打印(文章标题)
退货商品
api.add_resource(文章视图,/1/,端点=文章)主程序注册此蓝图
从文章导入文章_bp
.
app.register _蓝图(文章_bp)
长颈瓶休息渲染模板类HelloView(资源):
定义获取(自身):
返回render_template(hello.html )
api.add_resource(HelloView,/hello/,endpoint=hello )可以发现这样渲染出来的页面并不是我们想要的。要想使用长颈瓶休息渲染页面还需要定义一个out_html函数
@api.representation(text/html )
def out_html(数据、代码、标题):
resp=生成响应(数据)
退货责任
类HelloView(资源):
定义获取(自身):
返回render_template(hello.html )
api.add_resource(HelloView,/hello/,endpoint=hello )
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。