路由参数

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

@app.route('/user/')

def user_info(user_id):

return 'hello{}'.format(user_id)

指定请求方式

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

def demo2():

return request.method

Json数据格式

主要分为两种

Json对象:大括号所包括的

Json数据:中括号所包括的

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]])

主要为

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))

主要为

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)

使用json.dumps()

import json

@app.route('/demo4')

def demo4():

json_dict = {

"name":"xiaoming",

"age":18,

}

res = json.dumps(json_dict)

return res

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

重定向

重定向

# 重定向

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

使用正则表达式匹配路由

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)

补获错误异常

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)

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)

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)

python框架flask系列(2),Python的Web框架之Flask(2)相关推荐

  1. Python数据分析学习系列 十三 Python建模库介绍

    Python数据分析学习系列 十三 Python建模库介绍 资料转自(GitHub地址):https://github.com/wesm/pydata-book 有需要的朋友可以自行去github下载 ...

  2. python django 动态网页_Django-手撸简易web框架-实现动态网页-wsgiref初识-jinja2初识-python主流web框架对比-00...

    自己动手实现一个简易版本的web框架 在了解python的三大web框架之前,我们先自己动手实现一个. 备注: 这部分重在掌握实现思路,代码不是重点 代码中也有许多细节并未考虑,重在实现思路 手撸一个 ...

  3. 什么是web框架?解析为什么要用web框架?

    我们常用的web前端框架其实简单称呼叫web框架,现阶段web前端技术成熟,从视觉体验到用户体验都是比较好的,这也是从简单到复杂的web前端框架技术实现的,在国内前端技术开发人员也是非常的多,市面上的 ...

  4. go语言 echo框架_如何在Go Echo Web框架中设置嵌套HTML模板

    go语言 echo框架 by Ying Kit Yuen 英杰苑 如何在Go Echo Web框架中设置嵌套HTML模板 (How to setup a nested HTML template in ...

  5. python数据挖掘案例系列教程——python实现搜索引擎

    全栈工程师开发手册 (作者:栾鹏) python数据挖掘系列教程 今天我们使用python实现一个网站搜索引擎.主要包含两个部分.网站数据库的生成.搜索引擎.其中搜索引擎部分我们使用单词频度算法.单词 ...

  6. python网络爬虫系列教程——Python+PhantomJS +Selenium组合应用

    全栈工程师开发手册 (作者:栾鹏) python教程全解 Selenium 是什么?一句话,自动化测试工具.它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器. 理 ...

  7. python网络爬虫系列教程——python中urllib、urllib2、cookie模块应用全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python数据挖掘库urllib.urllib2.cookie知识全解.本文使用python2.7环境,如果需要使用python3的环境只需 ...

  8. Python 全栈系列89 - python 发微博文字+图片

    说明 通过python可以把图文信息程序化的发布到微博上,属于广播方式.前面已经用腾讯云的短消息实现了即时点对点的方式(0.045/条),以及通过邮件实现了非实时的点对点通信(非实时,免费).未来还可 ...

  9. Python自动化办公系列之Python操作PDF

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 输 作者介绍: 大家可以叫我黄同学(博客名:Huang Supre ...

最新文章

  1. JTEXTFIELD
  2. 设计模式之抽象工厂模式学习笔记
  3. Python也有做大型游戏的潜力?原来我们小看了Python,无所不能!!
  4. python:将时间戳转换成格式化日期
  5. 计算机网络通信中常用的检错码,4月全国高等教育自学考试计算机网络与通信试题及答案解析...
  6. 执行import xlrd,报错ModuleNotFoundError: No module named 'xlrd'
  7. Alexa市场占有率分析:Compute、CDN、DNS
  8. Android下OpenSLES播放PCM音频文件
  9. docker registry push 覆盖_Maven一键部署Springboot到Docker仓库,为自动化做准备
  10. 如何选择一款好的倾斜摄影相机
  11. 计算机报名503,503 service temporarily unavailable是什么意思【解决方法】
  12. boost | 线程与并发(一)atomic
  13. php x63 157 162,浙江理工大学 我的编程之路 零基础学C/C++ 200题 标程/题解
  14. java 距离转坐标_Java经纬读坐标的距离计算
  15. C# 微信支付之JSAPI支付
  16. 深度学习量化总结(PTQ、QAT)
  17. 编程之美 一摞烙饼问题
  18. 物联网平台-工业4.0应用程序的边缘处理
  19. texstudio深色主题设置
  20. 微信好友删除了怎么找回来?

热门文章

  1. pandas对dataframe的数据行进行随机抽样(Random Sample of Rows):使用sample函数进行数据行随机抽样(有放回的随机抽样,replacement)
  2. AttributeError: ‘FPDF‘ object has no attribute ‘unifontsubset‘
  3. 机器学习数据清洗之异常数据处理、标准差法、MAD法、箱图法、图像对比法、异常值处理准则
  4. cross-entropy(交叉熵)是什么?用了表征什么东西?
  5. matplotlib绘制带比例(percentile)的堆叠(stacked)条形图(bar plot)
  6. laravel php跨域请求,Laravel 5.x设置跨域访问
  7. Linux下如何查看硬件信息?
  8. PacBio Sequencing and Its Applications PacBio测序及其应用
  9. php批量请求url_php请求url的方法小结
  10. ubuntu安装mysql 密码忘了怎么办_在ubuntu上面安装mysql都密码忘记及一些常用命令...