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 相关文章推荐
一则python3的简单爬虫代码
May 26 Python
python实现指定字符串补全空格的方法
Apr 30 Python
Python实现新浪博客备份的方法
Apr 27 Python
在Python的Flask框架中构建Web表单的教程
Jun 04 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
Jun 14 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
Dec 12 Python
python基础_文件操作实现全文或单行替换的方法
Sep 04 Python
Django的models模型的具体使用
Jul 15 Python
Python3实现mysql连接和数据框的形成(实例代码)
Jan 17 Python
Django如何实现密码错误报错提醒
Sep 04 Python
基于Python实现天天酷跑功能
Jan 06 Python
Python中zipfile压缩包模块的使用
May 14 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
别人整理的服务器变量:$_SERVER
2006/10/20 PHP
php中取得URL的根域名的代码
2011/03/23 PHP
PHP实现的json类实例
2015/07/28 PHP
thinkphp,onethink和thinkox中验证码不显示的解决方法分析
2016/06/06 PHP
PHP url的pathinfo模式加载不同控制器的简单实现
2016/08/12 PHP
php+javascript实现的动态显示服务器运行程序进度条功能示例
2017/08/07 PHP
最近项目写了一些js,水平有待提高
2009/01/31 Javascript
JS 分号引起的一段调试问题
2009/06/18 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
js判断手机浏览器操作系统和微信浏览器的方法
2016/04/30 Javascript
浅谈EasyUi ComBotree树修改 父节点选择的问题
2016/11/07 Javascript
js canvas实现放大镜查看图片功能
2017/06/08 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
Vue实现点击后文字变色切换方法
2018/02/11 Javascript
浅谈如何通过node.js对数据进行MD5加密
2018/05/16 Javascript
vue+egg+jwt实现登录验证的示例代码
2019/05/18 Javascript
深入了解响应式React Native Echarts组件
2019/05/29 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
使用python检测主机存活端口及检查存活主机
2015/10/12 Python
python命令行参数用法实例分析
2019/06/25 Python
TensorFlow车牌识别完整版代码(含车牌数据集)
2019/08/05 Python
pytorch 指定gpu训练与多gpu并行训练示例
2019/12/31 Python
python实现连连看游戏
2020/02/14 Python
django配置app中的静态文件步骤
2020/03/27 Python
解决c++调用python中文乱码问题
2020/07/29 Python
使用phonegap获取位置信息的实现方法
2017/03/31 HTML / CSS
澳大利亚家具商店:Freedom
2020/12/17 全球购物
办公室文员工作自我评价
2013/12/01 职场文书
给女儿的表扬信
2014/01/18 职场文书
出生公证委托书
2014/04/03 职场文书
党的群众路线教育实践活动通讯稿
2014/09/10 职场文书
个人作风建设心得体会
2014/10/22 职场文书
劳动争议和解协议书范本
2014/11/20 职场文书
Java并发编程必备之Future机制
2021/06/30 Java/Android
Redis集群节点通信过程/原理流程分析
2022/03/18 Redis
永中文档在线转换预览基于nginx配置部署方案
2022/06/10 Servers