iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python超级明星WEB框架Flask
  • 410
分享到

Python超级明星WEB框架Flask

框架明星Python 2023-01-31 00:01:48 410人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

flask简介Flask是一个相对于Django而言轻量级的WEB框架。和DjanGo大包大揽不同,Flask建立于一系列的开源软件包之上,这其中 最主要的是WSGI应用开发库Werkzeug和模板引擎Jinja: 策略 :werkzeug

flask简介

Flask是一个相对于Django而言轻量级的WEB框架

和DjanGo大包大揽不同,Flask建立于一系列的开源软件包之上,这其中 最主要的是WSGI应用开发库Werkzeug和模板引擎Jinja:

汇智网 flask werkzeug.png 汇智网 flask jinja-logo.png

策略 :werkzeug和Jinja这两个库和Flask一样,都是pocoo团队开发的。这 或许体现了pocoo与Django竞争时关于生态的一种策略,这种策略的自然 延伸是Flask框架中没有包含数据库方面的构件,无论ORM还是其他。

关注点 :Flask是一个WSGI应用框架,这意味着我们进行Flask开发时,不需要 关注网络方面的操作,Flask应用的入口是封装过的网络请求包,出口是 网络响应,我们仅需要关注这个阶段内的处理逻辑。

WSGI服务器 :Flask虽然内置了简单的WSGI服务器,但其性能仅仅适用于开发期的调试。 Flask官网推荐了多种WSGI服务器,实现方式从多进程到多线程到协程, 这方面的选择我们在本课程中将不涉及。

REST适应性 :虽然Flask和Django一样,最初的出发点都是服务端的动态网页应用。但 Flask的设计使之也相当适用于面向资源的REST架构,在越来越移动化 并且单页应用越来越重要的web开发领域,这是Flask相对于Django相当 大的优势。

Hello Flask

编写一个基于Flask的hello world相当容易:

1、导入Flask类

from flask import Flask

Flask类是Flask框架的核心类,它实现了WSGI应用规范。

2、创建Flask实例

app = Flask(__name__)

Flask构造函数的第一个参数指定一个引入名/importname。Flask框架 使用这个名字进行静态资源、模板、错误信息的定位。除非你清楚的理解它的 作用,通常情况下,我们总应该使用特殊变量_name

Flask实例是可调用的(具有call方法),这个实例可以直接对接 WSGI服务器。

3、注册路由

@route('/')def index():
    return 'Hello,Flask!'

注册路由就是建立URL规则和处理函数之间的关联。Flask框架依赖于路由 完成Http请求的分发。

路由中的函数被称为视图函数,其返回值将作为HTTP响应的正文内容。

4、对接并启动WSGI服务器

Flask封装了一个简单的开发用WSGI服务器,我们可以通过调用run() 启动服务器运行:

app.run(host='0.0.0.0',port=80)

概述

路由是mvc架构的Web框架中相当重要的一个概念,也是本节课程的重点。

顾名思意,路由就是在迷茫中找出一条路的意思。在Flask框架中,路由就表示为用户请求的URL找出其对应的处理函数之意。

汇智网 flask route-map.jpg

在本节课程,我们将主要从以下几个方面讲解Flask框架中的路由:

如何为应用注册路由? 如何为路由指定其支持的HTTP方法? 如何匹配动态URL? 如何对URL中的变量类型进行过滤? 如何理解访问点/endpoint? 如何为应用设定静态路由? 如何避免硬编码指向其他视图的URL?

注册路由

在Flask应用中,路由是指用户请求的URL与视图函数之间的映射。Flask框架 根据HTTP请求的URL在路由表中匹配预定义的URL规则,找到对应的视图函数, 并将视图函数的执行结果返回WSGI服务器:

汇智网 flask route

可见路由表在Flask应用中处于相当核心的位置。路由表的内容是由应用开发者填充。

route装饰器 :可以使用Flask应用实例的route装饰器将一个URL规则绑定到 一个视图函数上。

例如,下面的示例将URL规则/test绑定到视图函数test()上:

@app.route('/test')def test():
    return 'this is response'

如果这个应用部署在主机ezhost.com的根目录下,那么当用户访问:

http://ezhost.com/teset

Flask框架就会调用我们的test()函数,其返回结果就传递给WSGI服务器发送给访问者。

add_url_rule() :另一种等价的写法是使用Flask应用实例的add_url_route()方法。 下面的示例注册了一个与前例相同的路由:

def test():
    return 'this is response'app.add_url_route('/test',view_func=test)

其实,route装饰器内部也是通过调用add_url_route()方法实现的路由注册。 但是显然,使用装饰器使代码看起来更优雅一些。

为路由指定HTTP方法

默认情况下,Flask路由仅支持HTTP的GET请求。可以使用methods关键字参数,在注册 路由时显式地声明视图方法支持的HTTP方法。

例如,下面的示例将URL规则/auth绑定到视图函数v_auth(),这个路由仅支持POST方法:

@app.route('/auth',methods=['POST'])def v_auth():pass

指定多种HTTP方法支持

关键字参数methods的类型为list,因此可以同时指定多种HTTP方法。

下面的示例中,使URL规则/user同时支持POST方法和GET方法:

@app.route('/user',methods=['POST','GET'])
def v_users():    if request.method == 'GET':        return ... # 返回用户列表
    if request.method == 'POST'
        return ... #创建新用户

这个特性使Flask非常易于开发REST架构的后台服务,而不仅仅局限于传统的动态网页。

匹配动态URL

有时我们需要将同一类URL映射到同一个视图函数处理,比如,使用同一个视图函数 来显示不同用户的个人档案。我们希望以下的URL都可以分发到同一个视图函数:

汇智网 flask route-param

在Flask中,可以将URL中的可变部分使用一对小括号<>声明为变量, 并为视图函数声明同名的参数:

@app.route('/user/<uname>')def v_user(uname):
    return '%s\'s Profile' % uname
</uname>

在上面的示例中,URL规则中的<uname>表示这部分是可变的,Flask将提取用户请求的 URL中这部分的内容,并作为视图函数v_user()的uname参数进行调用。

URL变量类型过滤

考虑下面的示例,我们希望通过HTTP共享文件夹/var/readonly中的文件:

/var
    /readonly
        /a.txt
        /b.txt
        /repo
           /c.txt
           /d.txt

简单思考一下就有答案了。我们可以构造URL规则/file/<fname>,然后直接 读取文件内容返回给用户。注册如下的路由:

@app.route('/file/<fname>')def v_file(fname):
    fullname = os.path.join('/var/readonly',fname)
    f = open(fullname)
    cnt =  f.read()
    f.close()
    return cnt
</fname>

测试结果表明,/file/a.txt和/file/b.txt都没有问题,但是/file/repo/c.txt和 /file/repo/d.txt却会失败。

这是因为,默认情况下,在URL规则中的变量被视为不包含/的字符串。/file/repo/c.txt 是没有办法匹配URL规则/file/<fname>的。

可以使用内置的path转换器告诉Flask框架改变这一默认行为。path转换器允许 规则匹配包含/的字符串:

@app.route('/file/<path:fname>')</path:fname>

在Flask中,转换器/converter用来对从URL中提取的变量进行预处理,这个过程 发生在调用视图函数之前。Flask预置了四种转换器:

  1. string - 匹配不包含/的字符串,这是默认的转换器

  2. path - 匹配包含/的字符串

  3. int - 只有当URL中的变量是整型值时才匹配,并将变量转换为整型

  4. float - 只有当URL中的变量是浮点值时才匹配,并将变量转换为浮点型

访问点/endpoint

我们一直强调,路由的作用是根据请求的URL,找到对应的视图函数。这没错,但是在 Flask框架中,请求任务的分发并不是直接从用户请求的URL一步定位到视图函数, 两者之间隔着一个访问点/endpoint。

以下面的代码为例,我们看Flask怎样实现请求的分发:

@app.route('/home')def home():pass

在Flask内部使用两张表维护路由:

  • url_map :维护URL规则和endpoint的映射

  • view_functions :维护endpoint和视图函数的映射。

以用户访问URL/home为例,Flask将首先利用url_map找到所请求URL对应的 endpoint,即访问点home,然后再利用view_functions表查找home这个访问点 对应的视图函数,最终匹配到函数home():

汇智网 flask endpoint.jpg

默认访问点 :当我们使用route装饰器注册路由时,默认使用被装饰函数的 函数名(name)作为访问点,因此,你看到上面的表中,路由中的访问点为home。

自定义访问点 :可以在使用route装饰器或调用add_url_rule()方法注册路由时,使用 endpoint关键字参数改变这一默认行为:

@app.route('/home',endpoint='whocare')def home():pass

此时的两张路由表将变成这样:

汇智网 flask endpoint2

静态目录路由

当创建应用实例时,Flask将自动添加一条静态目录路由,其访问点 始终被设置为static,URL规则默认被设置为/static,本地路径默认被 设置为应用文件夹下的static子文件夹:

+------------------------------------------------------------+ 

| url rule | endpoint | view_function |

 | /static | static | Flask.send_static_file | 

+------------------------------------------------------------+ 

如果你的应用目录如下:

/app
    /web.py
    /static
        /main.CSS
        /Jquery.min.js

那么启动应用后就可以通过URL/static/main.css访问static文件夹下的main.css了。

除了访问点被固定为static,静态目录的URL规则和本地目录都是可以根据应用情况进行调整。

改变默认的本地路径 :可以在创建应用对象时使用关键字参数static_folder改变 默认的静态文件夹。例如,你的静态文件都存放在应用下的assets目录下, 那么可以按如下的方式创建应用对象:

app = Flask(name,static_folder='assets') 也可以使用一个绝对路径:

app = Flask(name,static_folder='/var/www/static') 改变默认的本地路径并不会对路由表产生影响。

改变默认的URL规则 : 如果不喜欢静态目录URL/static,也可以在创建应用 对象时使用关键字参数static_url_path换一个别的名字。

下面的示例中,将应用下的assets文件夹注册为静态目录/assets:

app = Flask(name,static_folder='assets',static_url_path='/assets') 当应用运行后,通过URL/assets/main.css就可以访问assets文件夹下的 main.css文件了。

这时的路由表变化为:

+------------------------------------------------------------+

 | url | endpoint | view_function | 

| /assets | static | Flask.send_static_file | 

+------------------------------------------------------------+

构造URL

在一个实用的视图中,不可避免地存在指向其他视图的链接。在之前的课程示例中,我们 都是在视图函数中这样硬编码这些链接URL的:

@app.route('/')def v_index():
    return '<a href="/tech">tech</a>'@app.route('/tech') def v_tech():pass

大部分情况下这种硬编码URL是可以工作的。但如果这个应用被挂在WSGI服务器的一个 子路径下,比如:/app1,那么用户访问URL/tech是不会成功的,这时应当访问/app1/tech 才可以正确地路由到视图函数v_tech()。

我们应当使用访问点让Flask框架帮我们计算链接URL。简单地给url_for()函数传入 一个访问点,它返回将是一个可靠的URL地址:

@app.route('/')def v_index():
    print url_for('v_contacts')  # /contact
    return 'see console output!'@app.route('/contact')def v_contacts():pass

添加查询参数 : 使用关键字参数,可以在构造的URL中生成查询串。下面的调用将生成 /contact?format=JSON

@app.route('/')def v_index():
    print url_for('v_contacts',format='json')    return  ''@app.route('/contact')     def v_contacts():pass

添加URL变量 : 如果指定访问点对应的视图函数接收参数,那么关键字参数将生成对应的参数URL。下面的 示例将生成/contact/Julia?format=html

@app.route('/')def v_index():
    print url_for('v_contact',name='Julia',format='html')
    return ''@app.route('/contact/<name>')def v_contact(name):pass
</name>

添加锚点 :使用_anchor关键字可以为生成的URL添加锚点。下面的示例将生成URL /contact#part2

@app.route('/')def v_index():
    print url_for('v_contacts',_anchor='part2')@app.route('/contact')def v_contacts():pass

外部URL : 默认情况下,url_for()生成站内URL,可以设置关键字参数_external 为True,生成包含站点地址的外部URL。下面的示例将生成URLhttp://<x.y.z>/contacts:

@app.route('/')def v_index():
    print url_for('v_contacts',_external=True)@app.route('/contact')def v_contacts():pass

更多内容如请求应答、核心机制、数据库相关、组件以及相应的示例和练习可以去这里==>http://www.hubwiz.com/course/562427361bc20c980538e26f/


--结束END--

本文标题: Python超级明星WEB框架Flask

本文链接: https://www.lsjlt.com/news/182806.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python超级明星WEB框架Flask
    Flask简介Flask是一个相对于Django而言轻量级的Web框架。和Django大包大揽不同,Flask建立于一系列的开源软件包之上,这其中 最主要的是WSGI应用开发库Werkzeug和模板引擎Jinja: 策略 :werkzeug...
    99+
    2023-01-31
    框架 明星 Python
  • web框架---Flask
    Flask Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人...
    99+
    2023-01-30
    框架 web Flask
  • Python Web开发用Flask还Django框架好
    本篇内容主要讲解“Python Web开发用Flask还Django框架好”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python Web开发用Flask还Django框架好”吧!是否有考虑过...
    99+
    2023-06-02
  • Flask入门Web微框架HelloFlask
    目录一、安装及简单Flask1、创建示例程序2、代码分解2.1 导入并实例化了Flask类2.2 注册路由2.3启动Web服务器 前言: Flask 是一个 Python 实现的 W...
    99+
    2024-04-02
  • Python使用Web框架Flask开发项目
    目录一、简介二、安装三、从 Hello World 开始3.1 Hello World3.2 修改Flask的配置3.3 调试模式3.4 绑定IP和端口3.5 本节源码四、获取 UR...
    99+
    2024-04-02
  • Python Web框架:Django、Flask和FastAPI巅峰对决
    今天,我们将深入探讨Python Web框架的三巨头:Django、Flask和FastAPI。无论你是Python小白还是老司机,本文都会为你解惑,带你领略这三者的魅力。废话不多说,让我们开始这场...
    99+
    2023-09-01
    django flask fastapi
  • Python常用Web框架Django、Flask与Tornado介绍
    web框架是什么 web开发框架是一组工具,同时也提供了非常多的资源,供软件开发人员构建和管理网站、提供web服务、编写web应用程序。它是一个抽象工具,能使开发应用程序和重复使用代...
    99+
    2024-04-02
  • python Web开发 flask轻量级Web框架实战项目--学生管理系统
     上次发的一篇文章,有很多朋友私信我要后面的部分,那咱们就今天来一起学习一下吧,因为我的数据库这门课选中的课题是学生管理系统,所以今天就以这个课题为例子,从0到1去实现一个管理系统。数据库设计部分我会专门出一个博客的,敬请期待吧~~~ ...
    99+
    2023-09-03
    flask python 后端
  • web开发框架Flask学习二
    jinja2模板规范 在当前项目中创建一个文件为templates的文件夹,将其设置为模板文件夹,新建的html为模板页面, 在视图函数中使用render_template(".html的文件", my_...
    99+
    2023-01-30
    框架 web Flask
  • web开发框架Flask学习一
    flask框架 用Python做Web开发的三大框架特点 Django 主要特点是大而全,集成了很多的组件,例如:Admin Form Model等,不管你用不用的到,他都会为 ...
    99+
    2023-01-30
    框架 web Flask
  • Python轻量级Web框架:Bottle库!
    和它本身的轻便一样,Bottle库的使用也十分简单。相信在看到本文前,读者对python也已经有了简单的了解。那么究竟何种神秘的操作,才能用百行代码完成一个服务器的功能?让我们拭目以待。1. Bottle库安装1)使用pip安装2)下载Bo...
    99+
    2023-05-14
    Python web Bottle
  • Python怎么使用Web框架Flask开发项目
    本篇内容主要讲解“Python怎么使用Web框架Flask开发项目”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么使用Web框架Flask开发项目”吧!一、简介Flask是一个轻量...
    99+
    2023-07-06
  • python Flask框架mysql数
      我是一个没有笔记习惯的低级程序员,但是我还是喜欢编程,从小学就开始跟着玩电脑,对抓鸡,ddos,跳板刷钻开始了自己的IT 旅程,之后学习了各种语言,但是可惜都不没有达到精通,都是略懂一二,现在想把Python的自己的学习 历程记录下...
    99+
    2023-01-31
    框架 python Flask
  • Python如何使用Web框架Flask开发项目
    一、简介Flask是一个轻量级的基于Python的web框架。这份文档中的代码使用 Python 3 运行。 建议在 linux 下实践本教程中命令行操作、执行代码。二、安装通过pip3安装Flask即可:$ sudo pip3 insta...
    99+
    2023-05-14
    Python web Flask
  • Python web实战 | 用 Flask 框架快速构建 Web 应用【实战】
     概要 Python web 开发已经有了相当长的历史,从最早的 CGI 脚本到现在的全栈 Web 框架,现在已经成为了一种非常流行的方式。 Python 最早被用于 Web 开发是在 1995 年(90年代早期),当时使用 CGI ...
    99+
    2023-09-22
    python 前端 flask webkit
  • python的简单web框架flask快速实现详解
    目录简介web框架的重要组成部分快速上手flaskflask的第一个应用flask中的路由不同的http方法静态文件使用模板总结简介 python可以做很多事情,虽然它的强项在于进...
    99+
    2023-02-07
    python web框架flask python web框架
  • 【100天精通python】Day49:python web编程_web框架,Flask框架从安装到使用
    目录 1 Web 框架 2 python 中常用的web框架 3 Flask 框架的使用 3.1 Flask框架安装 3.2 第一个Flask程序 3.3 路由 3.3.1 基本路由 3.3.2 动态路由 3.3.3 HTTP 方法 3.3...
    99+
    2023-09-02
    python 前端 flask
  • Web微框架Flask如何安装使用
    这篇文章主要为大家展示了“Web微框架Flask如何安装使用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Web微框架Flask如何安装使用”这篇文章吧。前言:Flask 是一个 Python ...
    99+
    2023-06-21
  • Python Flask框架怎么使用
    这篇文章主要介绍“Python Flask框架怎么使用”,在日常操作中,相信很多人在Python Flask框架怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python ...
    99+
    2023-06-22
  • Python中的flask框架详解
    Flask是一个Python编写的Web 微框架,让我们可以使用Python语言快速实现一个网站或Web服务。本文参考自Flask官方文档,大部分代码引用自官方文档。 安装flask...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作