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使用tablib生成excel文件的简单实现方法
Mar 16 Python
Python模拟用户登录验证
Sep 11 Python
使用Python的turtle模块画图的方法
Nov 15 Python
Python实现PS滤镜碎片特效功能示例
Jan 24 Python
浅谈django orm 优化
Aug 18 Python
python dataframe向下向上填充,fillna和ffill的方法
Nov 28 Python
Python基于百度云文字识别API
Dec 13 Python
python 自动批量打开网页的示例
Feb 21 Python
python字符串分割及字符串的一些常规方法
Jul 24 Python
keras训练曲线,混淆矩阵,CNN层输出可视化实例
Jun 15 Python
Python 防止死锁的方法
Jul 29 Python
python 爬取吉首大学网站成绩单
Jun 02 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的简单采集数据入库程序【续篇】
2014/07/30 PHP
php语言的7种基本的排序方法
2020/12/28 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
你需要知道的10个最佳javascript开发实践小结
2012/04/15 Javascript
JavaScript访问CSS属性的几种方式介绍
2014/07/21 Javascript
coffeescript使用的方式汇总
2015/08/05 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(基于jquery)
2015/11/18 Javascript
jQuery获取父元素及父节点的方法小结
2016/04/14 Javascript
jQuery 选择同时包含两个class的元素的实现方法
2016/06/01 Javascript
jquery checkbox无法用attr()二次勾选问题的解决方法
2016/07/22 Javascript
通过源码分析Vue的双向数据绑定详解
2017/09/24 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
2018/05/31 jQuery
Vue+Element实现表格编辑、删除、以及新增行的最优方法
2019/05/28 Javascript
微信小程序如何刷新当前界面的实现方法
2019/06/07 Javascript
VUE.CLI4.0配置多页面入口的实现
2019/11/25 Javascript
Python中的zip函数使用示例
2015/01/29 Python
PyMongo安装使用笔记
2015/04/27 Python
python妙用之编码的转换详解
2017/04/21 Python
TensorFLow用Saver保存和恢复变量
2018/03/10 Python
Django继承自带user表并重写的例子
2019/11/18 Python
如何在python中判断变量的类型
2020/07/29 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
2020/09/01 Python
python脚本使用阿里云slb对恶意攻击进行封堵的实现
2021/02/04 Python
浅谈CSS3特性查询(Feature Query: @supports)功能简介
2017/07/31 HTML / CSS
html5是什么_动力节点Java学院整理
2017/07/07 HTML / CSS
新西兰最大、占有率最高的综合性药房:PharmacyDirect药房中文网
2020/11/03 全球购物
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
毕业生优秀推荐信
2013/11/26 职场文书
集团公司总经理岗位职责
2013/12/20 职场文书
剪枝的学问教学反思
2014/02/07 职场文书
尊师重教演讲稿
2014/09/04 职场文书
信仰观后感
2015/06/03 职场文书
毕业生政审意见范文
2015/06/04 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers
css 中多种边框的实现小窍门
2021/04/07 HTML / CSS