一、Json格式
1.豆瓣中的json格式
- 打開豆瓣網(wǎng)頁
https://movie.douban.com/tv/#!type=tv&tag=%E7%83%AD%E9%97%A8&sort=recommend&page_limit=20&page_start=0
-
打開控制臺(tái)(F12)
打開json數(shù)據(jù)的時(shí)候變成這個(gè)格式是因?yàn)樘砑恿薺son viewer插件烁竭,在我之前的筆記中有教程
- 我們將這里面的json數(shù)據(jù)復(fù)制一下
- 在項(xiàng)目下新建一個(gè)test.json乏盐,將剛剛復(fù)制好的數(shù)據(jù)粘進(jìn)去
{
"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"
}
]
}
(因?yàn)閿?shù)據(jù)太多我們進(jìn)行了一下修剪)
返回Json格式 :通用數(shù)據(jù)格式
json {}對(duì)象 弛随、[]json數(shù)組
2.json和字典的相互轉(zhuǎn)換
-
新建一個(gè)json_demo.py文件
- 將json字符串轉(zhuǎn)化成字典
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字符串轉(zhuǎn)化成字典
print(type(tvs))
test_dict = json.loads(tvs)
print(type(test_dict))
print([x for x in test_dict["subjects"]])
-
如果想要加載前兩個(gè)數(shù)據(jù)
- 將字典類型轉(zhuǎn)換成json
#將字典類型轉(zhuǎn)換成json
json_dict = {
"name":"zhangsan",
"age":18
}
#json.dumps將python字典轉(zhuǎn)化成json字符串
res = json.dumps(json_dict)
print((type(res)))
3.返回json數(shù)據(jù)
方式一:jsonify
- 打開app.py文件
from flask import jsonify
@app.route('/demo3')
def demo3():
json_dict = {
"name" : "zhangsan",
"age" : 18
}
return jsonify(json_dict)
- 刷新網(wǎng)頁:http://localhost:5001/demo3
-
查看類型
方式二:json.dumps()【不推薦】
import json
#不推薦使用json.dumps()轉(zhuǎn)換成Json字符串返回
#因?yàn)榉祷氐臄?shù)據(jù)要符合http 協(xié)議規(guī)范
#如果是json需要指定Content-Type:application/json
@app.route('/demo4')
def demo4():
json_dict = {
"name" : "zhangsan",
"age" : 18
}
res = json.dumps(json_dict)
return res
- 刷新網(wǎng)頁:http://localhost:5001/demo4
-
查看類型
1.不推薦使用json.dumps()轉(zhuǎn)換成Json字符串返回
2.因?yàn)榉祷氐臄?shù)據(jù)要符合http 協(xié)議規(guī)范
3.如果是json需要指定Content-Type:application/json
二届腐、重定向
from flask import redirect
#重定向
@app.route('/demo5')
def demo5():
return redirect('https://www.baidu.com')
- 重定向到視圖函數(shù)
from flask import url_for
#重定向到視圖函數(shù)
@app.route('/demo6')
def demo6():
return redirect(url_for('demo3'))
- 重定向到有參數(shù)的視圖函數(shù)中
#重定向到帶有參數(shù)的視圖函數(shù)
@app.route('/demo7')
def demo7():
return redirect(url_for('user_info',user_id=1000))
- 自定義狀態(tài)碼
#自定義狀態(tài)碼
@app.route('/demo8')
def demo8():
#python中的return可以一次返回多個(gè)對(duì)象
return '自定義狀態(tài)碼',666
三、匹配路由
- 使用正則表達(dá)式匹配路由
# 使用正則表達(dá)式匹配路由
from flask import Flask
from werkzeug.routing import BaseConverter
app = Flask(__name__)
# 1绸罗、 導(dǎo)入轉(zhuǎn)換器基類荒典,在flask中,所有的路由匹配規(guī)則都是使用轉(zhuǎn)換器對(duì)象進(jìn)行記錄
# 2酪劫、 自定義轉(zhuǎn)換器繼承BaseConverter
# 3、 添加轉(zhuǎn)換器到默認(rèn)的字典中
# 4寺董、 使用自定義轉(zhuǎn)換器實(shí)現(xiàn)自定義規(guī)則匹配
class RegexConverter(BaseConverter):
def __init__(self, url_map,*args):
super(RegexConverter, self).__init__(url_map)
# 將第一個(gè)參數(shù)當(dāng)做匹配規(guī)則進(jìn)行保存
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)
- 輸入網(wǎng)址:http://127.0.0.1:5000/user/222
四覆糟、異常
主動(dòng)拋出異常
- 新建一個(gè)demo_exp.py文件
from flask import Flask, abort
app = Flask(__name__)
@app.route('/')
def index():
# 主動(dòng)拋出 http異常狀態(tài)碼
abort(500)
# 只能拋出http協(xié)議錯(cuò)誤的狀態(tài)碼
abort(666)
return 'haha'
if __name__ == '__main__':
app.run(debug=True)
錯(cuò)誤捕獲
from flask import Flask, abort
app = Flask(__name__)
@app.route('/')
def index():
# 主動(dòng)拋出 http異常狀態(tài)碼
# abort(500)
# 中能拋出http協(xié)議錯(cuò)誤的狀態(tài)碼
# abort(666)
a = 0
b = 1/a
return 'haha'
# 捕獲錯(cuò)誤
# errorhandler裝飾器
@app.errorhandler(500)
def errorhandler_server(e):
return "服務(wù)器壞啦"
@app.errorhandler(ZeroDivisionError)
def zeroDivisionError(e):
return '除數(shù)不能為0'
if __name__ == '__main__':
app.run(debug=True)
(此文章僅作為個(gè)人學(xué)習(xí)筆記使用,如有錯(cuò)誤歡迎指正~)