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类的定义、继承及类对象使用方法简明教程
May 08 Python
分析并输出Python代码依赖的库的实现代码
Aug 09 Python
Python自动化运维_文件内容差异对比分析
Dec 13 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
Jan 23 Python
python 筛选数据集中列中value长度大于20的数据集方法
Jun 14 Python
Python爬取个人微信朋友信息操作示例
Aug 03 Python
Python读写zip压缩文件的方法
Aug 29 Python
浅谈Python接口对json串的处理方法
Dec 19 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
Aug 23 Python
Python使用pymysql模块操作mysql增删改查实例分析
Dec 19 Python
Python Map 函数的使用
Aug 28 Python
如何用Python 加密文件
Sep 10 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程序员编程注意事项
2008/04/10 PHP
snoopy PHP版的网络客户端提供本地下载
2008/04/15 PHP
php引用计数器进行垃圾收集机制介绍
2012/09/19 PHP
浅析php创建者模式
2014/11/25 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
Yii2如何批量添加数据
2016/05/17 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
jQuery实现数秒后自动提交form的方法
2015/03/05 Javascript
js完美解决IE6不支持position:fixed的bug
2015/04/24 Javascript
Bootstrap每天必学之折叠
2016/04/12 Javascript
详解nodejs微信公众号开发——2.自动回复
2017/04/10 NodeJs
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
关于jQuery里prev()的简单操作代码
2017/10/27 jQuery
js实现图片粘贴上传到服务器并展示的实例
2017/11/08 Javascript
Node.js利用console输出日志文件的方法示例
2018/04/27 Javascript
Nodejs Express 通过log4js写日志到Logstash(ELK)
2018/08/30 NodeJs
解决VUE中document.body.scrollTop为0的问题
2018/09/15 Javascript
node.js的Express服务器基本使用教程
2019/01/09 Javascript
如何使用50行javaScript代码实现简单版的call,apply,bind
2019/08/14 Javascript
小程序使用wxs解决wxml保留2位小数问题
2019/12/13 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
python函数的5种参数详解
2017/02/24 Python
Python实现字符串与数组相互转换功能示例
2017/09/22 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
2018/01/11 Python
Python读取txt某几列绘图的方法
2018/10/14 Python
Python 保存矩阵为Excel的实现方法
2019/01/28 Python
Python datetime包函数简单介绍
2019/08/28 Python
Python使用Pandas库常见操作详解
2020/01/16 Python
实例讲解CSS3中的border-radius属性
2015/08/18 HTML / CSS
法国最大电子商务平台:Cdiscount
2018/03/13 全球购物
如何判断一段程序是由C 编译程序还是由C++编译程序编译的
2013/08/04 面试题
装修致歉信
2014/01/15 职场文书
求职信需要的五点内容
2014/02/01 职场文书
学校2014重阳节活动策划方案
2014/09/16 职场文书
Golang 1.18 多模块Multi-Module工作区模式的新特性
2022/04/11 Golang