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使用PyGame绘制图像并保存为图片文件的方法
Apr 24 Python
Python去除字符串两端空格的方法
May 21 Python
以windows service方式运行Python程序的方法
Jun 03 Python
Python实现图像几何变换
Jul 06 Python
Python数据类型详解(三)元祖:tuple
May 08 Python
python如何在列表、字典中筛选数据
Mar 19 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
Dec 19 Python
python-pyinstaller、打包后获取路径的实例
Jun 10 Python
Django外键(ForeignKey)操作以及related_name的作用详解
Jul 29 Python
Python warning警告出现的原因及忽略方法
Jan 31 Python
pycharm通过anaconda安装pyqt5的教程
Mar 24 Python
python 画图 图例自由定义方式
Apr 17 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实现文件下载(支持中文文名)
2013/12/04 PHP
php的慢速日志引起的Mysql错误问题分析
2014/05/13 PHP
PHP下载文件函数与用法示例
2019/09/27 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
2019/10/21 PHP
javascript显示选择目录对话框的代码
2008/11/10 Javascript
Jquery工作常用实例 使用AJAX使网页进行异步更新
2011/07/26 Javascript
js动态添加onload、onresize、onscroll事件(另类方法)
2012/12/26 Javascript
使用PHP+JQuery+Ajax分页的实现
2013/04/23 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
jQuery插件分享之分页插件jqPagination
2014/06/06 Javascript
js图片闪动特效可以控制间隔时间如几分钟闪动一下
2014/08/12 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
2015/01/28 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
JavaScript File API实现文件上传预览
2016/02/02 Javascript
Javascript日期格式化format函数的使用方法
2016/08/30 Javascript
简易的JS计算器实现代码
2016/10/18 Javascript
基于element-ui组件手动实现单选和上传功能
2018/12/06 Javascript
微信小程序实现复选框效果
2018/12/28 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
微信小程序判断页面是否从其他页面返回的实例代码
2019/07/03 Javascript
[04:00]黄浦江畔,再会英雄——完美世界DOTA2 TI9应援视频
2019/07/31 DOTA
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
用Python编写一个国际象棋AI程序
2014/11/28 Python
Python中的__SLOTS__属性使用示例
2015/02/18 Python
Python中用于转换字母为小写的lower()方法使用简介
2015/05/19 Python
python3中dict(字典)的使用方法示例
2017/03/22 Python
Python 使用PIL numpy 实现拼接图片的示例
2018/05/08 Python
使用selenium模拟登录解决滑块验证问题的实现
2019/05/10 Python
浅谈keras中的batch_dot,dot方法和TensorFlow的matmul
2020/06/18 Python
Python调用飞书发送消息的示例
2020/11/10 Python
竞选部长演讲稿
2014/04/26 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
2014年维修电工工作总结
2014/11/20 职场文书
诗词赏析-(浣溪沙)
2019/08/13 职场文书
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android
「回转企鹅罐」10周年纪念展「輪るピングドラム展」海报公开
2022/03/22 日漫