flask jinjia,flask中文网

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: