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 Matplotlib库入门指南
May 18 Python
浅析Python中将单词首字母大写的capitalize()方法
May 18 Python
Python环境变量设置方法
Aug 28 Python
python并发编程之多进程、多线程、异步和协程详解
Oct 28 Python
Python网络爬虫中的同步与异步示例详解
Feb 03 Python
Python中将两个或多个list合成一个list的方法小结
May 12 Python
python的time模块和datetime模块实例解析
Nov 29 Python
Python 实现敏感目录扫描的示例代码
May 21 Python
Python sublime安装及配置过程详解
Jun 29 Python
Python Django路径配置实现过程解析
Nov 05 Python
Python3使用Selenium获取session和token方法详解
Feb 16 Python
Python torch.flatten()函数案例详解
Aug 30 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 array 的加法操作代码
2010/07/24 PHP
用穿越火线快速入门php面向对象
2012/02/22 PHP
thinkphp多层MVC用法分析
2015/12/30 PHP
Zend Framework+smarty用法实例详解
2016/03/19 PHP
Yii2简单实现多语言配置的方法
2016/07/23 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
Javascript 作用域使用说明
2009/08/13 Javascript
JavaScript读取中文cookie时的乱码问题的解决方法
2009/10/14 Javascript
IE浏览器打印的页眉页脚设置解决方法
2009/12/08 Javascript
js 获取服务器控件值的代码
2010/03/05 Javascript
JS中prototype关键字的功能介绍及使用示例
2013/07/21 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
2015/05/16 Javascript
jfinal与bootstrap的登录跳转实战演习
2015/09/22 Javascript
详解Bootstrap各式各样的按钮(推荐)
2016/12/13 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
使用react实现手机号的数据同步显示功能的示例代码
2018/04/03 Javascript
基于Vue实现可以拖拽的树形表格实例详解
2018/10/18 Javascript
使用微信小程序开发弹出框应用实例详解
2018/10/18 Javascript
详解如何为你的angular app构建一个第三方库
2018/12/07 Javascript
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
使用vue-router切换页面时实现设置过渡动画
2019/10/31 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
2019/11/01 Javascript
ES6实现图片切换特效代码
2020/01/14 Javascript
Echarts.js无法引入问题解决方案
2020/10/30 Javascript
vue中activated的用法
2021/01/03 Vue.js
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
对于Python的Django框架部署的一些建议
2015/04/09 Python
python版本五子棋的实现代码
2018/12/11 Python
Python写一个基于MD5的文件监听程序
2019/03/11 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
2020/02/14 Python
python numpy库np.percentile用法说明
2020/06/08 Python
python+pygame实现坦克大战小游戏的示例代码(可以自定义子弹速度)
2020/08/11 Python
2014年幼师工作总结
2014/11/22 职场文书
作文评语集锦
2014/12/25 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
自定义函数实现单词排序并运用于PostgreSQL(实现代码)
2021/04/22 PostgreSQL