Flask框架路由和视图用法实例分析


Posted in Python onNovember 07, 2019

本文实例讲述了Flask框架路由和视图用法。分享给大家供大家参考,具体如下:

创建一个简单flask框架程序

#1.导入Flask类
from flask import Flask
#2.创建Flask对象接收一个参数__name__,它会指向程序所在的包
app = Flask(__name__)
#3.装饰器的作用是将路由映射到视图函数index
@app.route('/')
def index():
  return 'Hello World'
#4.Flask应用程序实例的run方法,启动WEB服务器
if __name__ == '__main__':
  app.run()

1.Flask对象参数:

参数 描述
name (必写)代表程序主函数__main__
static_folder 静态资源文件夹(默认static)
static_url_path 静态资源路径(默认/static)
template_folder 模板文件夹(默认templates)

2.run方法参数:

参数 描述
ip IP地址
port 端口
debug 默认为False,更改为True可以不重启服务器进行服务器修改(ctrl+s保存即可), 并且报错后会有相应提示

debug 默认为False,更改为True可以不重启服务器进行服务器修改(ctrl+s保存即可), 并且报错后会有相应提示

路由视图函数

@app.route("/路径"):路由装饰器,可以通过路径执行被装饰的函数
app.url_map:可查看当前路由函数和路径

1.动态参数:@app.route("/路径/<类型:变量>")

常用类型

类型 描述
int 整型
float 浮点型
path 字符串型

自定义类型:

(1)编写⾃定义转换器类,继承BaseConverter
(2)编写init⽅法
(3)初始化⽗类,⼦类变量
(4)将⾃定义转换器添加到默认转换器列表中

例:

from flask import Flask
from werkzeug.routing import BaseConverter
#1.自定义类,继承自BaseConverter
class MyRegexConverter(BaseConverter):
  # 2.编写方法, init
  def __init__(self,map,regex):
    # 3.初始化, 父类, 子类变量
    super(MyRegexConverter, self).__init__(map)
    self.regex = regex
app = Flask(__name__)
# 4.将自定义转换器添加到,系统默认的转换列表中
app.url_map.converters["re"] = MyRegexConverter
print(app.url_map.converters)
# 接收三位整数
# 通过re调用的init方法, 参数1[默认]: app.url_map, 参数2: 自己定义的规则
@app.route('/<re("\d{3}"):number>')
def hello_world(number):
  return "the re number is %s"%number
# 接收四位整数
@app.route('/<re("\d{4}"):number>')
def get_four_number(number):
  return "the four number is %s"%number
# 接收手机号
@app.route('/<re("1[3456789]\d{9}"):mobile>')
def get_mobile_number(mobile):
  return "the mobile number is %s"%mobile
if __name__ == '__main__':
  app.run()

2.指定请求方式:

@app.route("/路径",methods=["⽅式1","方式2"])

方式:GET(默认),POST,PUT,DELETE

3.视图函数返回内容:

(1)直接返回响应体对象:

返回响应体、状态码、响应头

return "hello","666",{"name":"zhangsan"}

(2)手动创建响应体对象:

response = make_response("响应体")
response.status = "状态码 状态码描述"
response.headers = {响应头键值对}
(response.headers["Content-Type"] = "application/json")
return response

(3)返回json:

jsonify(dict)
jsonify(key=value,key2=value2)

(4)重定向:

重定向:redirect("路径")
反解析:url_for("函数",key=value)
二者配合使⽤可以传递参数

例:

"""
url_for, 反解析,根据视图函数名称找到,视图函数的路径地址,可以携带参数
格式: url_for('函数名',key=value), 返回的是一个地址(字符串)
"""""
from flask import Flask,url_for,redirect
app = Flask(__name__)
# 京东, 代号111
@app.route('/jingdong')
def jingdong():
  #print(url_for("taobao")) #/taobao
  # print(url_for("taobao",token=111)) #/taobao/111
  response = redirect(url_for("taobao",token=111))
  return response
#易迅, 代号222
@app.route('/yixun')
def yixun():
  response = redirect(url_for("taobao",token=222))
  return response
@app.route('/other')
def other():
  response = redirect(url_for("taobao",token=888))
  return response
# 淘宝
@app.route('/taobao/<int:token>')
def taobao(token):
  #判断哪个平台过来的用户
  if(token == 111):
    return "欢迎京东用户,光临淘宝,给你打9折"
  elif(token == 222):
    return "欢迎易迅用户,光临淘宝,给你打5折"
  else:
    return "其他用户"
if __name__ == '__main__':
  app.run()

4.异常处理:

(1)抛出异常(abort):

abort(code)

code为HTTP错误状态码

(2)异常捕获(errorhandler):

code为HTTP错误状态码
@app.errorhandler(code)
def fun():
…

参数加载方式

1.从类中加载:app.config.from_object()

例:

class Config(object):
  #调试模式
  DEBUG=True
app.config.from_object(Config)

2.从配置⽂件中加载:app.config.from_pyfile()

例:

app.config.from_pyfile("config.ini")

3.从环境变量加载(了解):

app.config.from_envvar()

希望本文所述对大家基于flask框架的Python程序设计有所帮助。

Python 相关文章推荐
状态机的概念和在Python下使用状态机的教程
Apr 11 Python
使用Python3编写抓取网页和只抓网页图片的脚本
Aug 20 Python
Python类属性的延迟计算
Oct 22 Python
利用Python实现Windows定时关机功能
Mar 21 Python
Python中生成Epoch的方法
Apr 26 Python
Python实现查找匹配项作处理后再替换回去的方法
Jun 10 Python
在python中安装basemap的教程
Sep 20 Python
解决python打不开文件(文件不存在)的问题
Feb 18 Python
Python 等分切分数据及规则命名的实例代码
Aug 16 Python
Python中的上下文管理器相关知识详解
Sep 19 Python
pytorch 实现将自己的图片数据处理成可以训练的图片类型
Jan 08 Python
PyCharm无法引用自身项目解决方式
Feb 12 Python
Python 切分数组实例解析
Nov 07 #Python
Django 简单实现分页与搜索功能的示例代码
Nov 07 #Python
Flask框架请求钩子与request请求对象用法实例分析
Nov 07 #Python
Django框架ORM数据库操作实例详解
Nov 07 #Python
Python程序暂停的正常处理方法
Nov 07 #Python
浅析python redis的连接及相关操作
Nov 07 #Python
大家都说好用的Python命令行库click的使用
Nov 07 #Python
You might like
PHP滚动日志的代码实现
2015/06/10 PHP
javascript动画效果类封装代码
2007/08/28 Javascript
JS类的封装及实现代码
2009/12/02 Javascript
jQuery学习笔记之toArray()
2014/06/09 Javascript
jQuery EasyUI datagrid实现本地分页的方法
2015/02/13 Javascript
深入浅析JavaScript中的scrollTop
2016/07/11 Javascript
Node.js 实现简单小说爬虫实例
2016/11/18 Javascript
scroll事件实现监控滚动条并分页显示(zepto.js)
2016/12/18 Javascript
CSS+jQuery实现简单的折叠菜单
2016/12/20 Javascript
javascript过滤数组重复元素的实现方法
2017/05/03 Javascript
JavaScript模拟文件拖选框样式v1.0的实例
2017/08/04 Javascript
vue中进入详情页记住滚动位置的方法(keep-alive)
2018/09/21 Javascript
微信小程序自定义轮播图
2018/11/04 Javascript
Node.js实现简单的爬取的示例代码
2019/06/25 Javascript
JQuery常用选择器功能与用法实例分析
2019/12/23 jQuery
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
Python continue语句用法实例
2014/03/11 Python
python3+PyQt5泛型委托详解
2018/04/24 Python
Python 占位符的使用方法详解
2019/07/10 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
2019/07/10 Python
Python代码生成视频的缩略图的实例讲解
2019/12/22 Python
浅谈matplotlib默认字体设置探索
2021/02/03 Python
英国航空官网:British Airways
2016/09/11 全球购物
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
Abbott Lyon官网:女士手表、珠宝及配件
2020/12/26 全球购物
生物化学研究助理员求职信
2013/10/09 职场文书
旅游节目策划方案
2014/05/26 职场文书
2014领导班子专题民主生活会对照检查材料思想汇报
2014/09/23 职场文书
2014年个人教学工作总结
2014/12/09 职场文书
沈阳故宫导游词
2015/01/31 职场文书
小学公民道德宣传日活动总结
2015/03/23 职场文书
正确使用MySQL update语句
2021/05/26 MySQL
python机器学习创建基于规则聊天机器人过程示例详解
2021/11/02 Python
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技
分享3个非常实用的 Python 模块
2022/03/03 Python
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL