python框架flask系列(2),Python的Web框架之Flask(2)

路由参数

默认string,可以指定参数的类型限定,限定参数为int

@app.route('/user/')

def user_info(user_id):

return 'hello{}'.format(user_id)

198f2bda60dd

198f2bda60dd

指定请求方式

@app.route('/demo2',methods=['GET','POST'])

def demo2():

return request.method

198f2bda60dd

198f2bda60dd

Json数据格式

主要分为两种

Json对象:大括号所包括的

198f2bda60dd

Json数据:中括号所包括的

198f2bda60dd

Json字符串和字典间的转换

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"

}

]

}

"""

# tvs 是一个json字符串

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"][:2]])

198f2bda60dd

主要为

import json

# json.loads()将Json字符串转化成字典

test_dict = json.loads(tvs)

字典转换成Json字符串

# 将字典类型转换成json

json_dict = {

"name":"zhangsan",

"age":18

}

# json.dumps将python字典转化成json字符串

res = json.dumps(json_dict)

print(type(res))

198f2bda60dd

主要为

import json

# json.dumps将python字典转化成json字符串

res = json.dumps(json_dict)

返回Json格式

使用jsonify

from flask import jsonify

@app.route('/demo3')

def demo3():

json_dict = {

"name":"xiaoming",

"age":18,

}

return jsonify(json_dict)

198f2bda60dd

使用json.dumps()

import json

@app.route('/demo4')

def demo4():

json_dict = {

"name":"xiaoming",

"age":18,

}

res = json.dumps(json_dict)

return res

198f2bda60dd

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

198f2bda60dd

198f2bda60dd

重定向

重定向

# 重定向

from flask import redirect

@app.route('/demo5')

def demo5():

return redirect("https://www.bilibili.com/")

重定向到自己的视图函数

# 重定向到自己的视图函数

from flask import url_for

@app.route('/demo6')

def demo6():

return redirect(url_for('demo3'))

重定向到带有参数的视图函数视图函数

# 重定向到带有参数的视图函数视图函数

@app.route('/demo7')

def demo7():

# {% url '' 参数 %}Django

return redirect(url_for('user_info',user_id=123))

自定义状态码

# 自定义状态码

@app.route('/demo8')

def demo8():

# python 中的return可以一次返回多个对象

return '自定义状态码', 666

198f2bda60dd

使用正则表达式匹配路由

1、 导入转换器基类,在flask中,所有的路由匹配规则都是使用转换器对象进行记录

2、 自定义转换器继承BaseConverter

3、 添加转换器到默认的字典中

4、 使用自定义转换器实现自定义规则匹配

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)

198f2bda60dd

补获错误异常

1.主动抛出 http异常状态码(只能抛出http协议错误的状态码)

from flask import Flask,abort

app = Flask(__name__)

@app.route('/')

def index():

# 主动抛出 http异常状态码

# 只能抛出http协议错误的状态码

abort(500)

return 'haha'

if __name__ == '__main__':

app.run(debug=True)

198f2bda60dd

2.捕获错误

errorhandler装饰器

from flask import Flask,abort

app = Flask(__name__)

@app.route('/')

def index():

abort(500)

a = 0

b = 10/a

return 'haha'

# 捕获错误

# errorhandler装饰器

@app.errorhandler(500)

def errorhandler_server(e):

return '服务器坏了'

if __name__ == '__main__':

app.run(debug=True)

198f2bda60dd

3.捕获指定的错误

from flask import Flask,abort

app = Flask(__name__)

@app.route('/')

def insex():

a = 0

b = 10/a

return 'haha'

# 捕获指定的错误

@app.errorhandler(ZeroDivisionError)

def ZeroDivisionError(e):

return '除数不能为0'

if __name__ == '__main__':

app.run(debug=True)

198f2bda60dd

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值