• flask实现api接口以及GET&POST请求参数等的注意事项


    上一篇我们讲到了flask的初步搭建,本章将讲解flask实现api接口以及get与post请求的演示,

    新手搭建flask框架并启动以及flask启动接口地址的修改

    一、注解介绍

      在写代码之前呢,我们先来介绍几个“注解”,在Python中叫“装饰器”。

      装饰器其实就是在一个函数内部定义另外一个函数,然后返回一个新的函数,即动态的给一个对象添加额外的职责。还没明白的话,呃呃呃...先记着功能吧。

      1、@app.route()

        在flask中,@app.route()的作用主要是注册路径,相当于是一个路由。

        我们所见到的接口路径是http://127.0.0.2:8088/aaa/bbb,而在app.py中我们可以利用@app.route()帮助我们实现/aaa/这一层的路径标识。

        例如:@app.route('/aaa')所访问的接口就是http://127.0.0.2:8088/aaa/

      2、@infoModule.route()

         在flask中,@infoModule.route()的作用主要也是注册路径。

        他可以帮助我们区分是哪个模块的路径,例如:http://127.0.0.2:8088/aaa/bbb/中的bbb

    二、flask蓝图(Blueprint

      在此演示的只是接口的开发与调用,我们通常使用的接口路径为:“ip:端口号/模块名/接口名”的方式,在很多系统开发中,会有很多的模块,有很多人会想到在app.py中写很多个@app.route()来解决,但这样会将来维护代码会非常麻烦,而且容易出错。这时就要用到flask内置了一个模块化处理的类,即flask蓝图(Blueprint)。

      Blueprint 是一个存储操作方法的容器,这些操作在这个Blueprint 被注册到一个应用之后就可以被调用,Flask 可以通过Blueprint来组织URL以及处理请求。

      蓝图的使用:

      1、创建一个蓝图对象

        在controller文件中创建一个蓝图对象:

    testModule = Blueprint('testModule',__name__)

      2、在app.py中注册路由,生成应用对象

    app = Flask(__name__)
    @app.route('/') def hello_world(): return 'flask_test is running!!!'

      3、在应用对象中注册这个蓝图对象

    app.register_blueprint(testModule, url_prefix='/testModule')

      当这个应用启动后,通过/testModle/可以访问到蓝图中定义的视图函数

    三、接口开发

      前期准备:

      首先在项目根目录下面创建一个controller文件夹,然后创建一个test_controller.py的文件(名字自定义都行,等会import时注意路径就行)。

      

      test_controller.py文件的编写:

    import json
    import datetime
    from flask import Blueprint,url_for,request,render_template,session,redirect
    
    # 创建了一个蓝图对象
    testModule = Blueprint('testModule',__name__)

      app.py文件的编写:

    from flask import Flask
    from controller.test_controller import testModule
    
    app = Flask(__name__)
    app.register_blueprint(testModule, url_prefix
    ='/testModule') @app.route('/') def hello_world(): return 'flask_test is running!!!' if __name__ == '__main__': app.run(port=8088)

      

      完成以上准备工作后就可以进行接口的开发,只需要在test_controller.py文件中添加如下代码即可:

      1、GET请求无参数

    """
        GET请求,不带参数
    """
    @testModule.route("/get_test1",methods=["GET"])
    def get_test1():
        # 默认返回内容
        return_dict = {'return_code': '200', 'return_info': '处理成功', 'result': None}
        return json.dumps(return_dict, ensure_ascii=False)

       效果:

      2、GET请求,带参数

    """
        GET请求,带参数
    """
    @testModule.route("/get_test2",methods=["GET"])
    def get_test2():
        # 默认返回内容
        return_dict = {'return_code': '200', 'return_info': '处理成功', 'result': None}
        # 判断入参是否为空
        if len(request.args) == 0:
            return_dict['return_code'] = '5004'
            return_dict['return_info'] = '请求参数为空'
            return json.dumps(return_dict, ensure_ascii=False)
        # 获取传入的params参数
        get_data = request.args.to_dict()
        name = get_data.get('name')
        age = get_data.get('age')
        return_dict['result'] = "%s今年%s岁:%s" %(name,age,datetime.datetime.now())
        return json.dumps(return_dict, ensure_ascii=False)

    效果:

       3、POST请求,带参数

    """
        POST请求,带参数
    """
    @testModule.route("/post_test1", methods=["POST"])
    def post_test1():
        #默认返回内容
        return_dict = {'return_code':'200','return_info':'处理成功','result':None}
    
        # 判断传入的json数据是否为空
        if len(request.get_data()) == 0:
            return_dict['return_code'] = '5004'
            return_dict['return_info'] = '请求参数为空'
            return json.dumps(return_dict, ensure_ascii=False)
        name = request.values.get('name')
        age = request.values.get('age')
        # 对参数进行操作
        return_dict['result'] = "%s今年%s岁:%s" %(name,age,datetime.datetime.now())
        print(return_dict)
        return json.dumps(return_dict,ensure_ascii=False)

    效果:

     四、小结

      GET请求与POST请求获取参数的方式不同,所以在获取参数时需要注意设定的请求类型,出于安全考虑,一般一般只用POST请求传参。

     

  • 相关阅读:
    JSP学习
    Maven
    Android开发环境搭建
    Java Spring MVC
    you don't know js -- Scope and Closures学习笔记——第五章(闭包) 下篇
    you don't know js -- Scope and Closures学习笔记——第五章(闭包) 上篇
    you don't know js -- Scope and Closures学习笔记——第四章(声明提升 Hoisting)
    you don't know js -- Scope and Closures学习笔记——第三章(函数VS块作用域)
    you don't know js -- Scope and Closures学习笔记——第二章(词法作用域)
    you don't know js -- Scope and Closures学习笔记——第一章(什么是作用域)
  • 原文地址:https://www.cnblogs.com/pengpengdeyuan/p/14206087.html
Copyright © 2020-2023  润新知