Flask.4

为移动端编写接口

 

  • http协议

  • 编写路由

    • 浏览器 (客户端一种)CS/BS

    • B是一个C子集

  • 服务器返回数据

    • 网页数据 html

      • 浏览器

    • JSON数据

      • ajax javascript发送请求的一种方式

      • requests Python的一个请求库

      • 各种平台有各种平台的请求方式

  • 为移动端编写接口非常简单

    • 接口地址是什么

      • /xxx/yyy/zzz/

      • 见名知意

    • 接口需要什么参数,返回什么格式的数据

      • 参数根据业务场景

      • JSON数据

RESTFul

  • 软件架构设计思想

  • CS,客户端和服务端这种架构模型中

  • 表现层状态转换

    • 主语 (资源)

    • URI 每个URI代表一种资源

    • 资源展现给我们的形式就叫做表现层

    • 通过HTTP的请求谓词来实现表现层转换

  • 重要概念

    • URI

    • HTTP请求谓词

    • JSON

Flask-RESTful

  • 轻量级的RESTApi插件

  • marshal_with

    • 装饰器

    • 参数接收模板

    • 将返回的数据进行格式化

      • 数据内容如果比模板多,结果会自动删除多余的数据

      • 数据内容如果比模板少,结果会自动进行填充

  • 核心

    • 请求转换 输入

    • 输出格式化 输出

blog_fields = {
    "id": fields.Integer,
    "title": fields.String,
    "content": fields.String,
}

return_fields = {
    "msg": fields.String,
    "status": fields.Integer,
    "data": fields.Nested(blog_fields)
}

parse = reqparse.RequestParser()
parse.add_argument("title", required=True, help="请填写标题")
parse.add_argument("content", required=True, help="请填写内容")

class BlogsResource(Resource):

    @marshal_with(return_fields)
    def get(self):
        blogs = Blog.query.all()

        data = {
            "msg": "OK",
            "status": 200,
            "data": blogs
        }

        return data
#或者不加装饰器,直接返回
return marshal(data, return_fields)

 

Flask-RESTful

  • 输入

    • reqparse.RequestParser()

      • 对参数进行处理

      • 参数获取

      • 获取校验

        • 参数名

        • 类型限制 type

        • 错误提示 help

        • 是否必须 required

        • 隐私别名 dest

        • 参数来源 location

        • 参数数量,多个参数值 action

  • 输出

    • 将对象转换成JSON(dict)

    • marshal_with 装饰

    • marshal 函数

      • 将数据和模板传递进来

    • 模板

      • 字典

        • key 就是json中key

        • value 就是fileds.XXX

      • fields

        • attribute指定映射关系

          • 默认格式化的时候,会根据字典中的key去数据查找

          • 通过指定 attribute之后,会根据 attribute去查找

        • default 默认值

      • fields.Nested

        • 嵌套字段

        • 对象嵌套

        • 可以自动处理单个对象和列表对象

      • fields.List

        • 解决列表型数据

from flask_restful import  reqparse

parse = reqparse.RequestParser()

parse.add_argument("username", required=True, type=str, help="username can't be blank")
parse.add_argument("password", required=True, type=str, help="password can't be blank")
parse.add_argument("con_password", type=str)
parse.add_argument("action", required=True, type=str, help="please supply action")

 

#attribute 为字段名, 前面的内容为展示名, 旨在不行让别人看到数据库中的字段名
student_fields = {
    "name": fields.String(attribute="s_name"),
    "s_age": fields.Integer,
    "hehe": fields.String(default=""),
    "hehe_time": fields.Integer(default=3)
}

 

posted @ 2019-05-24 17:53  百超  阅读(80)  评论(0编辑  收藏  举报