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类继承用法实例分析
Oct 10 Python
python实现简单温度转换的方法
Mar 13 Python
Python的math模块中的常用数学函数整理
Feb 04 Python
使用paramiko远程执行命令、下发文件的实例
Oct 01 Python
wxpython实现图书管理系统
Mar 12 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
Jul 11 Python
Django中celery执行任务结果的保存方法
Jul 12 Python
Win10+GPU版Pytorch1.1安装的安装步骤
Sep 27 Python
Django使用消息提示简单的弹出个对话框实例
Nov 15 Python
Python 解决相对路径问题:&quot;No such file or directory&quot;
Jun 05 Python
Django开发RESTful API实现增删改查(入门级)
May 10 Python
PyTorch梯度裁剪避免训练loss nan的操作
May 24 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文件上传实例详解!!!
2007/01/02 PHP
php 页面执行时间计算代码
2008/12/04 PHP
PHP字符串处理的10个简单方法
2010/06/30 PHP
php实现session自定义会话处理器的方法
2015/01/27 PHP
PHP树的深度编历生成迷宫及A*自动寻路算法实例分析
2015/03/10 PHP
PHP通过加锁实现并发情况下抢码功能
2016/08/10 PHP
PHP实现一个轻量级容器的方法
2019/01/28 PHP
javascript编程起步(第四课)
2007/01/10 Javascript
再论Javascript的类继承
2011/03/05 Javascript
封装了一个js图片轮换效果的函数
2011/09/28 Javascript
滚动图片效果 jquery实现回旋滚动效果
2013/01/08 Javascript
javascript框架设计之种子模块
2015/06/23 Javascript
javascript随机抽取0-100之间不重复的10个数
2016/02/25 Javascript
Vue 固定头 固定列 点击表头可排序的表格组件
2016/11/25 Javascript
JavaScript简介_动力节点Java学院整理
2017/06/26 Javascript
node跨域请求方法小结
2017/08/25 Javascript
对于js垃圾回收机制的理解
2017/09/14 Javascript
对vue.js中this.$emit的深入理解
2018/02/23 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
[31:00]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS iG
2014/05/25 DOTA
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
在CentOS6上安装Python2.7的解决方法
2018/01/09 Python
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
2018/03/19 Python
Python格式化字符串f-string概览(小结)
2019/06/18 Python
从列表或字典创建Pandas的DataFrame对象的方法
2019/07/06 Python
Python2.7:使用Pyhook模块监听鼠标键盘事件-获取坐标实例
2020/03/14 Python
python实现贪吃蛇游戏源码
2020/03/21 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
连卡佛中国官网:Lane Crawford中文站
2018/01/27 全球购物
南京迈特望C/C++面试题
2012/07/09 面试题
数组越界问题
2015/10/21 面试题
汉语言文学专业求职信
2014/06/19 职场文书
2014年客服工作总结范文
2014/11/13 职场文书
校长师德表现自我评价
2015/03/05 职场文书
素质教育培训心得体会
2016/01/19 职场文书
如何把新闻人物写得立体、鲜活?
2019/08/14 职场文书