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实现的登录和操作开心网脚本分享
Jul 09 Python
Python文档生成工具pydoc使用介绍
Jun 02 Python
使用python对文件中的数值进行累加的实例
Nov 28 Python
python的schedule定时任务模块二次封装方法
Feb 19 Python
python爬虫项目设置一个中断重连的程序的实现
Jul 26 Python
Django之使用内置函数和celery发邮件的方法示例
Sep 16 Python
不到20行实现Python代码即可制作精美证件照
Apr 24 Python
如何打包Python Web项目实现免安装一键启动的方法
May 21 Python
基于Python 的语音重采样函数解析
Jul 06 Python
区分python中的进程与线程
Aug 13 Python
Python3 如何开启自带http服务
May 18 Python
python中的random模块和相关函数详解
Apr 22 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/10/09 PHP
php使用curl抓取qq空间的访客信息示例
2014/02/28 PHP
php导出csv格式数据并将数字转换成文本的思路以及代码分享
2014/06/05 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
thinkPHP5实现数据库添加内容的方法
2017/10/25 PHP
javascript笔试题目附答案@20081025_jb51.net
2008/10/26 Javascript
Array.prototype 的泛型应用分析
2010/04/30 Javascript
js change,propertychange,input事件小议
2011/12/20 Javascript
关于div自适应高度/左右高度自适应一致的js代码
2013/03/22 Javascript
jQuery获取select选中的option的value值实现方法
2016/08/29 Javascript
js从数组中删除指定值(不是指定位置)的元素实现代码
2016/09/13 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
JavaScript实现前端分页控件
2017/04/19 Javascript
react以create-react-app为基础创建项目
2018/03/14 Javascript
JavaScript实现短暂提示框功能
2018/04/04 Javascript
[41:17]完美世界DOTA2联赛PWL S3 access vs CPG 第二场 12.13
2020/12/17 DOTA
Python实现多线程下载文件的代码实例
2014/06/01 Python
python批量提交沙箱问题实例
2014/10/08 Python
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
Python的numpy库中将矩阵转换为列表等函数的方法
2018/04/04 Python
在PyCharm中实现关闭一个死循环程序的方法
2018/11/29 Python
利用scikitlearn画ROC曲线实例
2020/07/02 Python
Python实例方法、类方法、静态方法区别详解
2020/09/05 Python
利用简洁的图片预加载组件提升html5移动页面的用户体验
2016/03/11 HTML / CSS
canvas因为图片资源不在同一域名下而导致的跨域污染画布的解决办法
2019/01/18 HTML / CSS
澳大利亚新奇小玩意网站:Yellow Octopus
2017/12/28 全球购物
英国时尚优质的女装:Hope Fashion
2018/08/14 全球购物
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
Nike俄罗斯官方网站:Nike RU
2021/03/05 全球购物
关于逃课的检讨书
2014/01/23 职场文书
高中历史教学反思
2014/02/08 职场文书
高三高考决心书
2014/03/11 职场文书
交通文明倡议书
2014/05/16 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
导游词之南京中山陵
2019/11/27 职场文书
如何利用js在两个html窗口间通信
2021/04/27 Javascript