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之模拟鼠标键盘动作具体实现
Dec 30 Python
python持久性管理pickle模块详细介绍
Feb 18 Python
python实现感知器
Dec 19 Python
spark: RDD与DataFrame之间的相互转换方法
Jun 07 Python
Python3爬取英雄联盟英雄皮肤大图实例代码
Nov 14 Python
python事件驱动event实现详解
Nov 21 Python
用Python从0开始实现一个中文拼音输入法的思路详解
Jul 20 Python
Python类反射机制使用实例解析
Dec 30 Python
python 弧度与角度互转实例
Apr 15 Python
Python3爬虫中pyspider的安装步骤
Jul 29 Python
Python之matplotlib绘制折线图
Apr 13 Python
Python获取字典中某个key的value
Apr 13 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模板,主要想体现一下思路
2006/12/25 PHP
php与paypal整合方法
2010/11/28 PHP
PHP超牛逼无限极分类生成树方法
2015/05/11 PHP
jquery+thinkphp实现跨域抓取数据的方法
2016/10/15 PHP
php性能分析之php-fpm慢执行日志slow log用法浅析
2016/10/17 PHP
php查找字符串中第一个非0的位置截取
2017/02/27 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
2019/05/08 PHP
JS实现局部选择打印和局部不选择打印
2014/04/03 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
纯javascript判断查询日期是否为有效日期
2015/08/24 Javascript
AngularJS ng-app 指令实例详解
2016/07/30 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
2017/01/13 Javascript
老生常谈combobox和combotree模糊查询
2017/04/17 Javascript
JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能
2018/02/06 Javascript
教你如何用node连接redis的示例代码
2018/07/12 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
2019/02/15 jQuery
关于vue利用postcss-pxtorem进行移动端适配的问题
2019/11/20 Javascript
vscode 使用Prettier插件格式化配置使用代码详解
2020/08/10 Javascript
js实现复制粘贴的两种方法
2020/12/04 Javascript
[16:14]教你分分钟做大人:米拉娜(HEROS)
2014/11/24 DOTA
Python实现栈的方法
2015/05/26 Python
Python3获取拉勾网招聘信息的方法实例
2019/04/03 Python
python批量修改图片尺寸,并保存指定路径的实现方法
2019/07/04 Python
python下载库的步骤方法
2019/10/12 Python
python数据预处理 :数据共线性处理详解
2020/02/24 Python
python 数据分析实现长宽格式的转换
2020/05/18 Python
matplotlib 画双轴子图无法显示x轴的解决方法
2020/07/27 Python
python 6行代码制作月历生成器
2020/09/18 Python
美国珠宝精品店:Opulent Jewelers
2019/08/20 全球购物
人力资源管理毕业生自荐信
2013/11/21 职场文书
职工运动会邀请函
2014/02/02 职场文书
HR求职自荐信范文
2014/06/21 职场文书
大二学生学年自我鉴定
2014/09/12 职场文书
个人培训总结
2015/03/05 职场文书