美文网首页
web应用框架——Flask中的json格式

web应用框架——Flask中的json格式

作者: 思君_4cd3 | 来源:发表于2020-06-01 20:42 被阅读0次

    一、Json格式

    1.豆瓣中的json格式

    {
    "subjects": [
    {
    "rate": "7.5",
    "cover_x": 4429,
    "cover_x": "传闻中的陈芊芊",
    "url": "https://movie.douban.com/subject/34463197/",
    "playable": true,
    "cover": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2602398693.webp"
    },
      {
    "rate": "7.5",
    "cover_x": 4429,
    "cover_x": "传闻中的陈芊芊",
    "url": "https://movie.douban.com/subject/34463197/",
    "playable": true,
    "cover": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2602398693.webp"
    },
      {
    "rate": "7.5",
    "cover_x": 4429,
    "cover_x": "传闻中的陈芊芊",
    "url": "https://movie.douban.com/subject/34463197/",
    "playable": true,
    "cover": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2602398693.webp"
    }
    ]
    }
    

    (因为数据太多我们进行了一下修剪)


    返回Json格式 :通用数据格式
    json {}对象 、[]json数组


    2.json和字典的相互转换

    • 新建一个json_demo.py文件


    • 将json字符串转化成字典
    tvs = """
    {
    "subjects": [
    {
    "rate": "7.5",
    "cover_x": 4429,
    "cover_x": "传闻中的陈芊芊",
    "url": "https://movie.douban.com/subject/34463197/",
    "playable": true,
    "cover": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2602398693.webp"
    },
      {
    "rate": "7.5",
    "cover_x": 4429,
    "cover_x": "传闻中的陈芊芊",
    "url": "https://movie.douban.com/subject/34463197/",
    "playable": true,
    "cover": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2602398693.webp"
    },
      {
    "rate": "7.5",
    "cover_x": 4429,
    "cover_x": "传闻中的陈芊芊",
    "url": "https://movie.douban.com/subject/34463197/",
    "playable": true,
    "cover": "https://img3.doubanio.com/view/photo/s_ratio_poster/public/p2602398693.webp"
    }
    ]
    }
    """
    import json
    #json.loads()将json字符串转化成字典
    print(type(tvs))
    test_dict = json.loads(tvs)
    print(type(test_dict))
    print([x for x in test_dict["subjects"]])
    
    • 如果想要加载前两个数据


    • 将字典类型转换成json
    #将字典类型转换成json
    json_dict = {
        "name":"zhangsan",
        "age":18
    }
    
    #json.dumps将python字典转化成json字符串
    res = json.dumps(json_dict)
    print((type(res)))
    

    3.返回json数据

    方式一:jsonify
    • 打开app.py文件
    from flask import jsonify
    @app.route('/demo3')
    def demo3():
        json_dict = {
            "name" : "zhangsan",
            "age" : 18
        }
        return jsonify(json_dict)
    
    方式二:json.dumps()【不推荐】
    import  json
    #不推荐使用json.dumps()转换成Json字符串返回
    #因为返回的数据要符合http 协议规范
    #如果是json需要指定Content-Type:application/json
    @app.route('/demo4')
    def demo4():
        json_dict = {
            "name" : "zhangsan",
            "age" : 18
        }
        res = json.dumps(json_dict)
        return res
    

    1.不推荐使用json.dumps()转换成Json字符串返回
    2.因为返回的数据要符合http 协议规范
    3.如果是json需要指定Content-Type:application/json

    二、重定向

    from flask import redirect
    #重定向
    @app.route('/demo5')
    def demo5():
        return redirect('https://www.baidu.com')
    

    • 重定向到视图函数
    from flask import url_for
    #重定向到视图函数
    @app.route('/demo6')
    def demo6():
        return redirect(url_for('demo3'))
    
    • 重定向到有参数的视图函数中
    #重定向到带有参数的视图函数
    @app.route('/demo7')
    def demo7():
        return redirect(url_for('user_info',user_id=1000))
    
    • 自定义状态码
    #自定义状态码
    @app.route('/demo8')
    def demo8():
        #python中的return可以一次返回多个对象
        return '自定义状态码',666
    

    三、匹配路由

    • 使用正则表达式匹配路由
     # 使用正则表达式匹配路由
    from flask import Flask
    from werkzeug.routing import BaseConverter
    app = Flask(__name__)
    # 1、 导入转换器基类,在flask中,所有的路由匹配规则都是使用转换器对象进行记录
    # 2、 自定义转换器继承BaseConverter
    # 3、 添加转换器到默认的字典中
    # 4、 使用自定义转换器实现自定义规则匹配
    class RegexConverter(BaseConverter):
        def __init__(self, url_map,*args):
            super(RegexConverter, self).__init__(url_map)
            # 将第一个参数当做匹配规则进行保存
            print(args[0])
            self.regex = args[0]
    
    app.url_map.converters['re'] = RegexConverter
    
    
    @app.route('/user/<re("[0-9]{3}"):user_id>')
    def user_info(user_id):
        # return 'user_id %d'% user_id
        return 'user_id %{}'.format(user_id)
    if __name__ == '__main__':
    
        app.run(debug=True)
    

    四、异常

    主动抛出异常

    • 新建一个demo_exp.py文件
    from flask import Flask, abort
    
    app = Flask(__name__)
    @app.route('/')
    def index():
        # 主动抛出 http异常状态码
        abort(500)
        # 只能抛出http协议错误的状态码
        abort(666)
    
        return 'haha'
    
    if __name__ == '__main__':
    
        app.run(debug=True)
    

    错误捕获

    from flask import Flask, abort
    
    app = Flask(__name__)
    @app.route('/')
    def index():
        # 主动抛出 http异常状态码
        # abort(500)
        # 中能抛出http协议错误的状态码
        # abort(666)
        a = 0
        b = 1/a
        return 'haha'
    #  捕获错误
    # errorhandler装饰器
    @app.errorhandler(500)
    def errorhandler_server(e):
        return "服务器坏啦"
    
    @app.errorhandler(ZeroDivisionError)
    def zeroDivisionError(e):
        return '除数不能为0'
    if __name__ == '__main__':
    
        app.run(debug=True)
    

    (此文章仅作为个人学习笔记使用,如有错误欢迎指正~)

    相关文章

      网友评论

          本文标题:web应用框架——Flask中的json格式

          本文链接:https://www.haomeiwen.com/subject/yzzhzhtx.html