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获取GY-85九轴模块信息示例
Dec 05 Python
python进阶教程之模块(module)介绍
Aug 30 Python
python sort、sorted高级排序技巧
Nov 21 Python
Python中3种内建数据结构:列表、元组和字典
Nov 30 Python
python选择排序算法实例总结
Jul 01 Python
理解python中生成器用法
Dec 20 Python
Python中将变量按行写入txt文本中的方法
Apr 03 Python
DataFrame中去除指定列为空的行方法
Apr 08 Python
Django中的用户身份验证示例详解
Aug 07 Python
Python迭代器iterator生成器generator使用解析
Oct 24 Python
python实现一次性封装多条sql语句(begin end)
Jun 06 Python
python线程优先级队列知识点总结
Feb 28 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
re0第二季蕾姆被制作组打入冷宫!艾米莉亚女主扶正,原因唏嘘
2020/04/02 日漫
php遍历目录下文件并按修改时间排序操作示例
2019/07/12 PHP
jquery 双色表格实现代码
2009/12/08 Javascript
javascript学习笔记(十六) 系统对话框(alert、confirm、prompt)
2012/06/20 Javascript
javascript:;与javascript:void(0)使用介绍
2013/06/05 Javascript
window.onresize 多次触发的解决方法
2013/11/08 Javascript
javascript解析json数据的3种方式
2014/05/08 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
JS创建Tag标签的方法详解
2017/06/09 Javascript
AngularJs实现聊天列表实时刷新功能
2017/06/15 Javascript
ReactNative实现图片上传功能的示例代码
2017/07/11 Javascript
js编写简单的聊天室功能
2017/08/17 Javascript
JS中双击和单击事件冲突的解决方法
2018/04/09 Javascript
webpack4.x下babel的安装、配置及使用详解
2019/03/07 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
[00:08]DOTA2勇士令状等级奖励“天外飞星”
2019/05/24 DOTA
Python实现windows下模拟按键和鼠标点击的方法
2015/03/13 Python
浅谈Python黑帽子取代netcat
2018/02/10 Python
Python基于多线程实现抓取数据存入数据库的方法
2018/06/22 Python
Python实现字典按key或者value进行排序操作示例【sorted】
2019/05/03 Python
django认证系统 Authentication使用详解
2019/07/22 Python
python tkinter GUI绘制,以及点击更新显示图片代码
2020/03/14 Python
Python 如何创建一个线程池
2020/07/28 Python
Python如何重新加载模块
2020/07/29 Python
Michael Kors香港官网:美国奢侈品品牌
2019/12/26 全球购物
加拿大拼图大师:Puzzle Master
2020/12/28 全球购物
J2EE系统只能是基于web
2015/09/08 面试题
大学生自荐信
2013/12/11 职场文书
应届生自我鉴定
2013/12/11 职场文书
财务信息服务专业自荐书范文
2014/02/08 职场文书
社交电商模式的兴起:这些新的商机千万别错过
2019/07/26 职场文书