web應(yīng)用框架——Flask中的json格式

一、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"
}
]
}

(因?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)
方式二: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

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)

四覆糟、異常

主動(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ò)誤歡迎指正~)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末遮咖,一起剝皮案震驚了整個(gè)濱河市滩字,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖麦箍,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件漓藕,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡挟裂,警方通過查閱死者的電腦和手機(jī)享钞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來话瞧,“玉大人嫩与,你說我怎么就攤上這事〗慌牛” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵饵筑,是天一觀的道長(zhǎng)埃篓。 經(jīng)常有香客問我,道長(zhǎng)根资,這世上最難降的妖魔是什么架专? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮玄帕,結(jié)果婚禮上部脚,老公的妹妹穿的比我還像新娘。我一直安慰自己裤纹,他們只是感情好委刘,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鹰椒,像睡著了一般锡移。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上漆际,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天淆珊,我揣著相機(jī)與錄音,去河邊找鬼奸汇。 笑死施符,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的擂找。 我是一名探鬼主播戳吝,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼婴洼!你這毒婦竟也來了骨坑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎欢唾,沒想到半個(gè)月后且警,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡礁遣,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年斑芜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片祟霍。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡杏头,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出沸呐,到底是詐尸還是另有隱情醇王,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布崭添,位于F島的核電站寓娩,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏呼渣。R本人自食惡果不足惜棘伴,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屁置。 院中可真熱鬧焊夸,春花似錦、人聲如沸蓝角。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽帅容。三九已至颇象,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間并徘,已是汗流浹背遣钳。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留麦乞,地道東北人蕴茴。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像姐直,于是被迫代替她去往敵國(guó)和親倦淀。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355