flasgger的GET qury传参、POST form传参,以及返回示例

Flask搭建框架,从mongodb中读取数据,使用flasgger制作API


网上能查到的flagger相关较少,要么不好用,要么不显示respons的示例。基于此,整理了这篇笔记。

先上图

flasgger界面:在这里插入图片描述
个人信息页面(GET请求,qury携带参数)在这里插入图片描述
对应的flasgger
在这里插入图片描述
查询界面:在这里插入图片描述
对应的POST接口
在这里插入图片描述

flasgger踩过的坑

  1. 严格控制缩进
  2. 尽可能把缩进设置为 2 个空格,4 空格或 tab 键会有 bug
  3. 冒号后加空格再加值,否则可能有 bug
  4. 当类型为 arrgy 时,后边务必要跟上items(例子中的 $ref:… 可以直接替换成其引用的内容)
    例:
            ResultData:
              type: array  # 当类型为arrgy时,务必要带下一行的items以及$ref:......
              items:
                $ref: '#/definitions/SearchResult'  # 同时,要在结尾处编写definitions那一串
definitions:
  SearchResult:
    type: object
    properties:
      name:
        type: string
        description: 用户名
      age:
        type: integer
        description: 年龄

准备工作

设计了三个路由,分别是:

  1. GET / 主页,也就是查询页
  2. GET /person 个人页(附带qury格式的请求参数)
  3. POST /serach 查询数据(使用form表单传递参数)

主要是准备好相应的html页面和数据,我这里数据库用的mongodb(不重要,可自行选择)

主页

注意:flask的默认路径如下

  • /main.py
  • /static
    • /js
    • /css
    • /img
  • /templates
    • /*.html

templates/index.html:

<!DOCTYPE html>
<html lang="zh_CN">
<head>
    <meta charset="UTF-8">
    <title>标题</title>
</head>
<body>
<h1>查询</h1>
<div>
    <form method="post" action="search">
        <input type="text" name="name" placeholder="Name" />
        <input type="radio" name="sex" value=1></input>
        <input type="radio" name="sex" value=0></input>
        <input type="submit" value="Submit" />
    </form>
</div>
</body>
</html>

个人页

templates/person.html:

<!DOCTYPE html>
<html lang="zh_CN">
<head>
    <meta charset="UTF-8">
    <title>标题</title>
</head>
<body>
<h1>查询</h1>
<div>
    <form method="post" action="search">
        <input type="text" name="name" placeholder="Name" />
        <input type="radio" name="sex",value=1></input>
        <input type="radio" name="sex",value=0></input>
        <input type="submit" value="Submit" />
    </form>
</div>
</body>
</html>

数据库添加数据

import pymongo
connection = pymongo.MongoClient('127.0.0.1',27017)
db = connection['learn']
collection = db['student']

data = [{'name':'Smith', 'age':20,'sex':1},
        {'name':'Mike', 'age':22,'sex':0},
        {'name':'Jone', 'age':20,'sex':1},
        {'name':'Aba', 'age':13,'sex':0}]
collection.insert_many(data)

flasgger嵌入flask框架

flagger的嵌入,注意是在路由函数的注释里,或者直接修饰器引用(本文为前者)
直接按照示例里的格式编写即可

from flask import Flask,request,render_template,jsonify
import pymongo
from flasgger import Swagger

connect = pymongo.MongoClient('mongodb://localhost:27017')
db = connect['learn']
collection = db['student']

app = Flask(__name__, instance_relative_config=True)

swagger = Swagger(app, template={
  "definitions": {},
  "info": {
    "description": "前后端连接",
    "termsOfService": "/tos",
    "title": "开发 API",
    "version": "0.0.1"
  },
  "paths": {},
  "swagger": "2.0"
})


@app.route('/',methods=['GET'])
def index():
    return render_template('index.html')

@app.route('/person',methods=['GET'])
def person():
    """
查看个人界面
---
tags:
  - 用户信息
parameters:
  - name: name
    in: query
    description: 姓名
    default: Smith
    required: true
    type: string
  - name: id
    in: query
    description: 无用 测试
    type: int
    required: false
    default: 1212
responses:
  200:
    description: 返回查询结构页面
    """
    name = request.args.get('name')
    data = collection.find_one({'name': name}, {'_id': 0})
    return render_template('person.html',**data)

@app.route('/search',methods=['POST'])
def search():
    """
搜索个人信息,返回姓名、年龄
---
tags:
  - 用户信息
parameters:
  - name: name
    description: 姓名
    in: formData
    type: string
    required: true
    default: Smith
  - name: sex
    description: 性别
    in: formData
    type: int
    required: false
    default: 1
responses:
  200:
    description: 返回查询结果
    schema:
      type: object
      properties:
        success:
          type: boolean
        code:
          type: integer
        data:
          type: object
          properties:
            name:
              type: string
            age:
              type: integer
  default:
    description: 操作异常,执行失败.返回信息描述错误详情
    schema:
      type: object
      properties:
        success:
          type: boolean
          default: false
        code:
          type: integer
        msg:
          type: string
    """
    name = request.form.get('name')
    sex = request.form.get('sex')
    data = collection.find_one({'name':name,'sex':int(sex)},{'_id':0})
    if data:
        return jsonify({'code':200,'success':True,'data':{'age':data['age'],'name':name}})
    else:
        return jsonify({'code':400,'msg':f'无{name}相关数据'})


if __name__ == '__main__':
    app.run(host='127.0.0.1', port=5000, debug=True)
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一届纯良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值