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代码制作configure文件示例
Jul 28 Python
详解Python的Django框架中的模版继承
Jul 16 Python
一个基于flask的web应用诞生(1)
Apr 11 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
解决Python下imread,imwrite不支持中文的问题
Dec 05 Python
Python 做曲线拟合和求积分的方法
Dec 29 Python
Python字符串逆序输出的实例讲解
Feb 16 Python
解决pycharm上的jupyter notebook端口被占用问题
Dec 17 Python
tensorflow模型文件(ckpt)转pb文件的方法(不知道输出节点名)
Apr 22 Python
Python中Pyspider爬虫框架的基本使用详解
Jan 27 Python
Django实现聊天机器人
May 31 Python
python_tkinter事件类型详情
Mar 20 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设计模式 DAO(数据访问对象模式)
2011/06/26 PHP
PHP用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
深入extjs与php参数交互的详解
2013/06/25 PHP
PHP采用curl模仿用户登陆新浪微博发微博的方法
2014/11/07 PHP
Codeigniter实现发送带附件的邮件
2015/03/19 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
小程序微信支付功能配置方法示例详解【基于thinkPHP】
2019/05/05 PHP
PHP接入微信H5支付的方法示例
2019/10/28 PHP
ajax 文件上传应用简单实现
2009/03/03 Javascript
浅析JQuery中的html(),text(),val()区别
2014/09/01 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
js中获取 table节点各tr及td的内容简单实例
2016/10/14 Javascript
谈谈jQuery之Deferred源码剖析
2016/12/19 Javascript
详解在 Angular 项目中添加 clean-blog 模板
2017/07/04 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
JavaScript函数重载操作实例浅析
2020/05/02 Javascript
javascript解析json格式的数据方法详解
2020/08/07 Javascript
基于Python实现通过微信搜索功能查看谁把你删除了
2016/01/27 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
关于python pyqt5安装失败问题的解决方法
2017/08/08 Python
Python字典,函数,全局变量代码解析
2017/12/18 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
python thrift 实现 单端口多服务的过程
2020/06/08 Python
Django配置跨域并开发测试接口
2020/11/04 Python
关于Python 解决Python3.9 pandas.read_excel(‘xxx.xlsx‘)报错的问题
2020/11/28 Python
使用CSS实现阅读进度条
2017/02/27 HTML / CSS
详解HTML5中的manifest缓存使用
2015/09/09 HTML / CSS
家长对孩子的感言
2014/03/10 职场文书
优秀毕业生求职信
2014/06/05 职场文书
机关作风建设心得体会
2014/10/22 职场文书
建国大业电影观后感
2015/06/01 职场文书
计算机实训心得体会
2016/01/14 职场文书
OpenCV-Python实现轮廓的特征值
2021/06/09 Python
为什么MySQL分页用limit会越来越慢
2021/07/25 MySQL
Nginx跨域问题解析与解决
2022/08/05 Servers