百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

如何最简单、通俗地理解Flask?(flask pagination)

ccwgpt 2024-09-15 15:05 33 浏览 0 评论

一、Flask简介

Flask诞生于2010年,是用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。

Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现。

其 WSGI 工具箱采用 Werkzeug(路由模块),模板引擎则使用 Jinja2。这两个也是Flask框架的核心。

Python最出名的框架要数Django,此外还有Flask、Tornado等框架。虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一,这也是Flask受到广大开发者喜爱的原因。

Flask常用扩展包:

  • Flask-SQLalchemy:操作数据库;
  • Flask-migrate:管理迁移数据库;
  • Flask-Mail:邮件;
  • Flask-WTF:表单;
  • Flask-Bable:提供国际化和本地化支持,翻译;
  • Flask-script:插入脚本;
  • Flask-Login:认证用户状态;
  • Flask-OpenID:认证;
  • Flask-RESTful:开发REST API的工具;
  • Flask-Bootstrap:集成前端Twitter Bootstrap框架;
  • Flask-Moment:本地化日期和时间;
  • Flask-Admin:简单而可扩展的管理接口的框架

扩展列表:http://flask.pocoo.org/extensions/

  1. 中文文档(http://docs.jinkan.org/docs/flask/)
  2. 英文文档(http://flask.pocoo.org/docs/0.12/)

Flask与Django对比

  • Django vs Flask
  • Flask

框架之间的差别

  • Django功能大而全,Flask只包含基本的配置
    Django的一站式解决的思路,能让开发者不用在开发之前就在选择应用的基础设施上花费大量时间。Django有模板,表单,路由,认证,基本的数据库管理等等内建功能。与之相反,Flask只是一个内核,默认依赖于两个外部库: Jinja2 模板引擎和 Werkzeug WSGI 工具集,其他很多功能都是以扩展的形式进行嵌入使用。
  • Flask 比 Django 更灵活
  • Flask 在 Django 之后发布,现阶段有大量的插件和扩展满足不同需要
    Django发布于2005年,Flask创始于2010年年中。

二、Flask 安装环境

使用虚拟环境安装Flask,可以避免包的混乱和版本的冲突,虚拟环境是Python解释器的副本,在虚拟环境中你可以安装扩展包,为每个程序单独创建的虚拟环境,可以保证程序只能访问虚拟环境中的包。而不会影响系统中安装的全局Python解释器,从而保证全局解释器的整洁。

虚拟环境使用virtualenv创建,可以查看系统是否安装了virtualenv:

$ virtualenv --version

安装虚拟环境

$ sudo pip install virtualenv
$ sudo pip install virtualenvwrapper

创建虚拟环境(须在联网状态下)

$ mkvirtualenv Flask_py

安装完虚拟环境后,如果提示找不到mkvirtualenv命令,须配置环境变量:

# 1、创建目录用来存放虚拟环境
mkdir 
$HOME/.virtualenvs

# 2、打开~/.bashrc文件,并添加如下:
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

# 3、运行
source ~/.bashrc

进入虚拟环境

$ workon Flask_py

退出虚拟环境

如果所在环境为真实环境,会提示deactivate:未找到命令

$ deactivate Flask_py

安装Flask

指定Flask版本安装
$ pip install flask==0.10.1
pip freeze > requirements.txt

Mac系统:

$ easy_install flask==0.10.1

在ipython中测试安装是否成功

$ from flask import Flask

三、requirements 文件

Python 项目中必须包含一个 requirements.txt 文件,用于记录所有依赖包及其精确的版本号,以便在新环境中进行部署操作。

在虚拟环境使用以下命令将当前虚拟环境中的依赖包以版本号生成至文件中:

$ pip freeze >requirements.txt

安装或升级包后,最好更新这个文件以保证虚拟环境中的依赖包。

需求文件的内容示例如下:

alembic==0.9.2
blinker==1.4
click==6.7
dominate==2.3.1
Flask==0.10.1
Flask-Bootstrap==3.3.7.1
Flask-Login==0.4.0
Flask-Mail==0.9.1
Flask-Migrate==2.0.4
Flask-Redis==0.3.0
Flask-Script==2.0.5
Flask-SQLAlchemy==2.2
Flask-Testing==0.6.2
Flask-WTF==0.14.2
gunicorn==19.7.1
itsdangerous==0.24
Jinja2==2.9.6
Mako==1.0.6
MarkupSafe==1.0
MySQL-python==1.2.5
mysqlclient==1.3.10
PyMySQL==0.7.11
python-dateutil==2.6.0
python-editor==1.0.3
redis==2.10.5
six==1.10.0
SQLAlchemy==1.1.10
uWSGI==2.0.15
visitor==0.1.3
Werkzeug==0.12.2
WTForms==2.1
xmltodict==0.11.0

当需要创建这个虚拟环境的完全副本,可以创建一个新的虚拟环境,并在其上运行以下命令:

$ pip install -r requirements.txt

四、Hello World程序

Flask程序运行过程

  1. 当客户端想要获取资源时,一般会通过浏览器发起HTTP请求。
  2. 此时,Web服务器会把来自客户端的所有请求都交给Flask程序实例
  3. 程序实例使用Werkzeug来做路由分发(URL请求和视图函数之间的对应关系)。
  4. 根据每个URL请求,找到具体的视图函数并进行调用。
  • 在Flask程序中,路由的实现一般是通过程序实例的装饰器实现。
  • Flask调用视图函数后,可以返回两种内容:
    • 字符串内容:将视图函数的返回值作为响应的内容,返回给客户端(浏览器)
    • HTML模版内容:获取到数据后,把数据传入HTML模板文件中,模板引擎负责渲染HTTP响应数据,然后返回响应数据给客户端(浏览器)

    示例:

    • 新建Flask项目
    • 导入Flask类
    from flask import Flask
    • Flask函数接收一个参数name,它会指向程序所在的模块
    app = Flask(__name__)
    • 装饰器的作用是将路由映射到视图函数index
    @app.route('/')
    def index():
        return 'Hello World'
    • Flask应用程序实例的run方法启动WEB服务器
    if __name__ == '__main__':
        app.run()

    五、路由定义的基本方式

    请求方式限定

    使用 methods 参数指定可接受的请求方式,可以是多种

    @app.route('/',methods=['GET', 'POST'])
    def hello():
        return 'hello world'

    给路由传参示例

    有时我们需要将同一类URL映射到同一个视图函数处理,比如:使用同一个视图函数 来显示不同用户的订单信息。

    路由传递的参数默认当做string处理

    @app.route('/orders/<order_id>')
    def hello_itheima(order_id):
        # 此处的逻辑: 去查询数据库改用户的订单信息, 并返回
        print type(order_id) # 类型为unicode
        return 'hello itcast %d' % order_id

    这里指定int, 会调用系统的路由转换器进行匹配和转换.

    - 大致原理是将参数强转为int, 如果成功, 则可以进行路由匹配
    - 如果参数无法转换成功, 就无法匹配该路由
    @app.route('/orders/<int:order_id>')
    def hello_itheima(order_id):
        print type(order_id) # 类型为int
        return 'hello itcast %d' % order_id

    相关推荐

    十分钟让你学会LNMP架构负载均衡(impala负载均衡)

    业务架构、应用架构、数据架构和技术架构一、几个基本概念1、pv值pv值(pageviews):页面的浏览量概念:一个网站的所有页面,在一天内,被浏览的总次数。(大型网站通常是上千万的级别)2、u...

    AGV仓储机器人调度系统架构(agv物流机器人)

    系统架构层次划分采用分层模块化设计,分为以下五层:1.1用户接口层功能:提供人机交互界面(Web/桌面端),支持任务下发、实时监控、数据可视化和报警管理。模块:任务管理面板:接收订单(如拣货、...

    远程热部署在美团的落地实践(远程热点是什么意思)

    Sonic是美团内部研发设计的一款用于热部署的IDEA插件,本文其实现原理及落地的一些技术细节。在阅读本文之前,建议大家先熟悉一下Spring源码、SpringMVC源码、SpringBoot...

    springboot搭建xxl-job(分布式任务调度系统)

    一、部署xxl-job服务端下载xxl-job源码:https://gitee.com/xuxueli0323/xxl-job二、导入项目、创建xxl_job数据库、修改配置文件为自己的数据库三、启动...

    大模型:使用vLLM和Ray分布式部署推理应用

    一、vLLM:面向大模型的高效推理框架1.核心特点专为推理优化:专注于大模型(如GPT-3、LLaMA)的高吞吐量、低延迟推理。关键技术:PagedAttention:类似操作系统内存分页管理,将K...

    国产开源之光【分布式工作流调度系统】:DolphinScheduler

    DolphinScheduler是一个开源的分布式工作流调度系统,旨在帮助用户以可靠、高效和可扩展的方式管理和调度大规模的数据处理工作流。它支持以图形化方式定义和管理工作流,提供了丰富的调度功能和监控...

    简单可靠高效的分布式任务队列系统

    #记录我的2024#大家好,又见面了,我是GitHub精选君!背景介绍在系统访问量逐渐增大,高并发、分布式系统成为了企业技术架构升级的必由之路。在这样的背景下,异步任务队列扮演着至关重要的角色,...

    虚拟服务器之间如何分布式运行?(虚拟服务器部署)

      在云计算和虚拟化技术快速发展的今天,传统“单机单任务”的服务器架构早已难以满足现代业务对高并发、高可用、弹性伸缩和容错容灾的严苛要求。分布式系统应运而生,并成为支撑各类互联网平台、企业信息系统和A...

    一文掌握 XXL-Job 的 6 大核心组件

    XXL-Job是一个分布式任务调度平台,其核心组件主要包括以下部分,各组件相互协作实现高效的任务调度与管理:1.调度注册中心(RegistryCenter)作用:负责管理调度器(Schedule...

    京东大佬问我,SpringBoot中如何做延迟队列?单机与分布式如何做?

    京东大佬问我,SpringBoot中如何做延迟队列?单机如何做?分布式如何做呢?并给出案例与代码分析。嗯,用户问的是在SpringBoot中如何实现延迟队列,单机和分布式环境下分别怎么做。这个问题其实...

    企业级项目组件选型(一)分布式任务调度平台

    官网地址:https://www.xuxueli.com/xxl-job/能力介绍架构图安全性为提升系统安全性,调度中心和执行器进行安全性校验,双方AccessToken匹配才允许通讯;调度中心和执...

    python多进程的分布式任务调度应用场景及示例

    多进程的分布式任务调度可以应用于以下场景:分布式爬虫:importmultiprocessingimportrequestsdefcrawl(url):response=re...

    SpringBoot整合ElasticJob实现分布式任务调度

    介绍ElasticJob是面向互联网生态和海量任务的分布式调度解决方案,由两个相互独立的子项目ElasticJob-Lite和ElasticJob-Cloud组成。它通过弹性调度、资源管控、...

    分布式可视化 DAG 任务调度系统 Taier 的整体流程分析

    Taier作为袋鼠云的开源项目之一,是一个分布式可视化的DAG任务调度系统。旨在降低ETL开发成本,提高大数据平台稳定性,让大数据开发人员可以在Taier直接进行业务逻辑的开发,而不用关...

    SpringBoot任务调度:@Scheduled与TaskExecutor全面解析

    一、任务调度基础概念1.1什么是任务调度任务调度是指按照预定的时间计划或特定条件自动执行任务的过程。在现代应用开发中,任务调度扮演着至关重要的角色,它使得开发者能够自动化处理周期性任务、定时任务和异...

    取消回复欢迎 发表评论: