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运行的17个时新手常见错误小结
Aug 07 Python
win7 下搭建sublime的python开发环境的配置方法
Jun 18 Python
两个命令把 Vim 打造成 Python IDE的方法
Mar 20 Python
python 队列详解及实例代码
Oct 18 Python
Python实现字典去除重复的方法示例
Jul 31 Python
Python3正则匹配re.split,re.finditer及re.findall函数用法详解
Jun 11 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
Dec 06 Python
Tensorflow的常用矩阵生成方式
Jan 04 Python
Java如何基于wsimport调用wcf接口
Jun 17 Python
Python实现画图软件功能方法详解
Jul 28 Python
如何使用 Python 读取文件和照片的创建日期
Sep 05 Python
Python如何让字典保持有序排列
Apr 29 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网站来路获取代码(针对搜索引擎)
2010/06/08 PHP
php中使用接口实现工厂设计模式的代码
2012/06/17 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
摘自启点的main.js
2008/04/20 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
Javascript排序算法之计数排序的实例
2014/04/05 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
jquery实现最简单的滑动菜单效果代码
2015/09/12 Javascript
JavaScript实现网页加载进度条代码超简单
2015/09/21 Javascript
正则表达式(语法篇推荐)
2016/06/24 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
echarts3 使用总结(绘制各种图表,地图)
2017/01/05 Javascript
js仿百度音乐全选操作
2017/01/13 Javascript
Angular.JS中指令ng-if的注意事项小结
2017/06/21 Javascript
详解vue组件开发脚手架
2018/06/15 Javascript
JS+CSS3实现的简易钟表效果示例
2019/04/13 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
2019/07/13 Javascript
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
Python和php通信乱码问题解决方法
2014/04/15 Python
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
Python依赖包整体迁移方法详解
2019/08/15 Python
Python图像处理模块ndimage用法实例分析
2019/09/05 Python
如何使用python3获取当前路径及os.path.dirname的使用
2019/12/13 Python
Python基于httpx模块实现发送请求
2020/07/07 Python
CSS3轻松实现清新 Loading 效果的简单实例
2016/06/06 HTML / CSS
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
会计专业自我鉴定范文
2013/12/29 职场文书
大学生入党推荐书范文
2014/05/17 职场文书
民警群众路线教育实践活动对照检查材料
2014/10/04 职场文书
2014年销售工作总结
2014/12/01 职场文书
2015小学语文教师个人工作总结
2015/05/20 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
Oracle 多表查询基本语法实例
2022/04/18 Oracle