zoukankan      html  css  js  c++  java
  • flask返回数据类型

    服务器这种后台返回的数据只能是string,json或者是文件类型,对应Html的解析文件类型

    无法返回自定义的元组,只能返回规定好的元组,说白了只第一个元素有效

    所有返回前台的内容其实都应该是Response的对象或者其子类,我们看到如果返回的是字符串直接可以写成return u'字符串内容'的形式,但是其实这个字符串也是经过了Response包装的:return Response(u'字符串')
    我们看一段代码:
    
    # coding: utf-8
    
    from flask import Flask, Response
    
    app = Flask(__name__)  # type: Flask
    app.debug = True
    
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    @app.route('/login/')
    def login():
        return Response(u'login')
    
    if __name__ == '__main__':
        app.run()
    
    代码里我新建了一个login函数,返回的就是用Response包装后的字符串,访问地址可以看到页面打印了login。
    
    我们有时候需要返回数组、字典之类的数据,但是数组或者字典这些数据是不能直接return的。这个时候怎么办呢?答案就是你必须将数组或字典转换成json后再返回(这就是为什么我们做接口测试的时候传参前用json.loads()将字符串转换成字典的原因了),因为json就是一个字符串。
    
    数组或字典转换成json的函数叫做jsonify,你需要先导入from flask import jsonify或者像船长下面代码里写的那样,一下子导入好几个库:
    
    # coding: utf-8
    
    from flask import Flask, Response, jsonify
    
    app = Flask(__name__)  # type: Flask
    app.debug = True
    
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    @app.route('/login/')
    def login():
        dict1 = {"name": "Warren"}
        return jsonify(dict1)
    
    if __name__ == '__main__':
        app.run()
    上面代码里`dict1`的数据类型是一个字典,我们通过`jsonify()`将其转换成了`json`,就可以成功返回了,去页面,看到:
    
    
    
     
    
    除了字符串以外,还可以返回元组,但是返回元组是有要求的,元组内容包括三个参数:response、status_code、headers,其中:
    
    response指页面打印信息,可以是字符串或Response对象
    
    status_code指状态码,成功200,找不到页面404等等
    
    headers指信息头
    
    # coding: utf-8
    
    from flask import Flask, Response, jsonify
    
    app = Flask(__name__)  # type: Flask
    app.debug = True
    
    @app.route('/')
    def hello_world():
        return 'Hello World!'
    
    @app.route('/login/')
    
    def login():
        dict1 = {"name": "Warren"}
        return jsonify(dict1)
    
    @app.route('/set/')
    def myset():
    
        return u'返回元组', 200, {"name": "Warren"}
    
    if __name__ == '__main__':
        app.run()
    看上面代码的myset函数,我return了一个元组(单个值的元组可以不写括号,而且如果你加上括号,pycharm会有黄线提醒你remove redundant parentheless,意思就是去掉多余的括号)。

    然后我们到页面访问
    /set/这个页面,打开F12就是开发者工具,然后刷新页面:
    
    

    元组

    demo.py(函数返回多个值(元组)):
    
    # 定义函数,有多个返回值(返回元组)
    def measure():
        """测量温度和湿度"""
     
        print("测量开始...")
        temp = 39
        wetness = 50
        print("测量结束...")
     
        # 元组-可以包含多个数据,因此可以使用元组让函数一次返回多个值
        # 如果函数返回的类型是元组,小括号可以省略
        # return (temp, wetness)
        return temp, wetness  # 小括号可以省略
     
    # 元组
    result = measure()
    print(result)  # (39, 50)
     
    # 需要单独的处理温度或者湿度 - 不方便
    print(result[0])  # 39
    print(result[1])  # 50
     
     
    # 如果函数返回的类型是元组,同时希望单独的处理元组中的元素
    # 可以使用多个变量,一次接收函数的返回结果
    # 注意:使用多个变量接收结果时,变量的个数应该和元组中元素的个数保持一致
    gl_temp, gl_wetness = measure()  # 接受函数多个返回值
     
    print(gl_temp)  # 39
    print(gl_wetness)  # 50
    demo.py(利用元组交换变量值):
    
    a = 6
    b = 100
     
    # 解法1:-使用其他变量
    # c = a
    # a = b
    # b = c
     
    # 解法2:-不使用其他的变量
    # a = a + b
    # b = a - b
    # a = a - b
     
    # 解法3:-Python 专有
    # a, b = (b, a)
    # 提示:等号右边是一个元组,只是把小括号省略了
    a, b = b, a
     
    print(a)  # 100
    print(b)  # 6
     
     ———————————————— 
    版权声明:本文为CSDN博主「houyanhua1」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/houyanhua1/article/details/83999767
  • 相关阅读:
    复选框和文字对齐解决方案
    封装getElementsByClassName()
    原生js运动框架
    如何防止鼠标移出移入子元素触发mouseout和mouseover事件
    回调函数
    经验
    sublime text3函数追踪:ctags配置
    笔记
    编程经验NO.1 from月光博客
    概念
  • 原文地址:https://www.cnblogs.com/BlueFire-py/p/11384182.html
Copyright © 2011-2022 走看看