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

一、Json格式

1.豆瓣中的json格式

  • 打开豆瓣网页
    https://movie.douban.com/tv/#!type=tv&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0
  • 打开控制台(F12)




    打开json数据的时候变成这个格式是因为添加了json viewer插件,在我之前的笔记中有教程


  • 我们将这里面的json数据复制一下
  • 在项目下新建一个test.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)
  • 刷新网页:http://localhost:5001/demo3
  • 查看类型


方式二: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
  • 刷新网页:http://localhost:5001/demo4
  • 查看类型


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/')
def user_info(user_id):
    # return 'user_id %d'% user_id
    return 'user_id %{}'.format(user_id)
if __name__ == '__main__':

    app.run(debug=True)
  • 输入网址:http://127.0.0.1:5000/user/222

四、异常

主动抛出异常

  • 新建一个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格式)