Flask简介与基础入门

news2024/12/27 13:25:36

一、了解框架

Flask作为Web框架,它的作用主要是为了开发Web应用程序。那么我们首先来了解下Web应用程序。Web应用程序 (World Wide Web)诞生最初的目的,是为了利用互联网交流工作文档。

在这里插入图片描述

1、一切从客户端发起请求开始。

所有Flask程序都必须创建一个程序实例。

当客户端想要获取资源时,一般会通过浏览器发起HTTP请求。

此时,Web服务器使用一种名为WEB服务器网关接口的WSGI(Web Server Gateway Interface)协议,把来自客户端的请求都交给Flask程序实例。

Flask使用Werkzeug来做路由分发(URL请求和视图函数之间的对应关系)。根据每个URL请求,找到具体的视图函数。

在Flask程序中,路由一般是通过程序实例的装饰器实现。通过调用视图函数,获取到数据后,把数据传入HTML模板文件中,模板引擎负责渲染HTTP响应数据,然后由Flask返回响应数据给浏览器,最后浏览器显示返回的结果。

2、客户端不一定是浏览器,也可以是PC软件、手机APP、程序

根据服务器端的工作,将其分为两部分:

服务器:与客户端进行tcp通信,接收、解析、打包、发送http格式数据

业务程序:根据解析后的请求数据执行逻辑处理,形成要返回的数据交给服务器

服务器与Python业务程序的配合使用WSGI协议。

1.3 框架的轻重

重量级的框架:为方便业务程序的开发,提供了丰富的工具、组件,如Django

轻量级的框架:只提供Web框架的核心功能,自由、灵活、高度定制,如Flask、Tornado

二、认识Flask

1、简介

Flask诞生于2010年,是Armin ronacher(人名)用Python语言基于Werkzeug工具箱编写的轻量级Web开发框架。它主要面向需求简单的小应用。

Flask本身相当于一个内核,其他几乎所有的功能都要用到扩展(邮件扩展Flask-Mail,用户认证Flask-Login),都需要用第三方的扩展来实现。比如可以用Flask-extension加入ORM、窗体验证工具,文件上传、身份验证等。Flask没有默认使用的数据库,你可以选择MySQL,也可以用NoSQL。其 WSGI 工具箱采用 Werkzeug(路由模块) ,模板引擎则使用 Jinja2 。

可以说Flask框架的核心就是Werkzeug和Jinja2。

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

在这里插入图片描述

2、与Django对比

django提供了:

django-admin快速创建项目工程目录

manage.py 管理项目工程

orm模型(数据库抽象层)

admin后台管理站点

缓存机制

文件存储系统

用户认证系统

而这些,flask都没有,都需要扩展包来提供

3、Flask扩展包

Flask-SQLalchemy:操作数据库;

Flask-migrate:管理迁移数据库;

Flask-Mail:邮件;

Flask-WTF:表单;

Flask-script:插入脚本;

Flask-Login:认证用户状态;

Flask-RESTful:开发REST API的工具;

Flask-Bootstrap:集成前端Twitter Bootstrap框架;

Flask-Moment:本地化日期和时间;

三、安装使用Flask

1、安装flask

pip3 install flask

2、第一个Flask程序

Flask程序运行过程:

所有Flask程序必须有一个程序实例。

Flask调用视图函数后,会将视图函数的返回值作为响应的内容,返回给客户端。一般情况下,响应内容主要是字符串和状态码。

当客户端想要获取资源时,一般会通过浏览器发起HTTP请求。此时,Web服务器使用WSGI(Web Server Gateway Interface)协议,把来自客户端的所有请求都交给Flask程序实例。WSGI是为 Python 语言定义的Web服务器和Web应用程序之间的一种简单而通用的接口,它封装了接受HTTP请求、解析HTTP请求、发送HTTP,响应等等的这些底层的代码和操作,使开发者可以高效的编写Web应用。

程序实例使用Werkzeug来做路由分发(URL请求和视图函数之间的对应关系)。根据每个URL请求,找到具体的视图函数。 在Flask程序中,路由的实现一般是通过程序实例的route装饰器实现。route装饰器内部会调用add_url_route()方法实现路由注册。

调用视图函数,获取响应数据后,把数据传入HTML模板文件中,模板引擎负责渲染响应数据,然后由Flask返回响应数据给浏览器,最后浏览器处理返回的结果显示给客户端。

创建一个flask项目,然后创建app.py文件。

# 导入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()

启动项目,在浏览器访问,此时页面上就会有Hello World。

3、Flask创建app对象

3.1 初始化参数

# 创建flask的应用对象;
# __name__   flask以这个模块所在的目录为总目录,默认这个目录中static为静态目录,templates为模板目录
app = Flask(__name__,
            static_url_path='/static',      # 访问静态资源的url前缀,默认为static
            static_folder='static',         # 静态文件的目录,默认为static
            template_folder='templates',    # 模板文件的目录,默认为templates
            )

3.2 配置参数

# 配置参数的使用方式(开启调试模式)
# 1.使用配置文件
app.config.from_pyfile("config.cfg")    # 在项目下创建一个config.cfg文件,然后在里面写DEBUG=True

# 2.使用对象配置参数
class Config(object):
     DEBUG = True
app.config.from_object(Config)

# 3.直接操作config的字典对象
app.config["DEBUG"] = True

3.3 在视图读取配置参数

# 2.使用对象配置参数
# class Config(object):
#     DEBUG = True
#     NAME = "test"
# app.config.from_object(Config)

from flask import Flask, current_app

    # 读取配置参数
    # 1.直接从全局对象app的config字典中取值
    # print(app.config.get("NAME"))
    # 2. 通过current_app获取参数
    # print(current_app.config.get("NAME"))

3.4 app.run的参数

# 启动Flask程序
app.run()   # 默认127.0.0.1
# app.run(host="192.168.1.1", port=5000)   # 使用电脑ip
# app.run(host="0.0.0.0", port=5000, debug=True)  # 配置host和port。设置0.0.0.0时都可以访问;可以在这里设置调试模式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/820676.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HW2: LibriSpeech phoneme classification

任务描述 音位分类预测(Phoneme classification),通过语音数据,预测音位。音位(phoneme),是人类某一种语言中能够区别意义的最小语音单位,是音位学分析的基础概念。每种语言都有一套…

【CesiumJS材质】(2)图片横向移动

效果示例 要素说明: 代码 /** Date: 2023-07-19 11:15:22* LastEditors: ReBeX 420659880qq.com* LastEditTime: 2023-07-28 12:08:58* FilePath: \cesium-tyro-blog\src\utils\Material\FlowPictureMaterialProperty.js* Description: 流动纹理/图片材质*/ imp…

PySpark 数据操作(综合案例)

搜索引擎日志分析 要求: 读取文件转换成RDD,并完成: 打印输出:热门搜索时间段(小时精度)Top3打印输出:热门搜索词Top3打印输出:统计黑马程序员关键字在哪个时段被搜索最多将数据转…

02|Oracle学习(数据类型、DDL)

1. 数据类型: 通常为:字符型、数值型、日期型以及大字段型大字段型:存放大数据及文件。 存储大数据时,基本上blob就能满足。 2. DDL(数据库定义语言) 主要包括对数据库对象的创建、删除及修改的操作。…

16. Spring Boot 统一功能处理

目录 1. 用户登录权限校验 1.1 最初用户登录验证 1.2 Spring AOP 用户统一登陆验证 1.3 Spring 拦截器 1.3.1 创建自定义拦截器 1.3.2 将自定义拦截器加入系统配置 1.4 练习:登录拦截器 1.5 拦截器实现原理 1.6 统一访问前缀添加 2. 统一异常处理 3. 统…

Redis篇

文章目录 Redis-使用场景1、缓存穿透2、缓存击穿3、缓存雪崩4、双写一致5、Redis持久化6、数据过期策略7、数据淘汰策略 Redis-分布式锁1、redis分布式锁,是如何实现的?2、redisson实现的分布式锁执行流程3、redisson实现的分布式锁-可重入4、redisson实…

AMEYA详解松下Panasonic HF SSOP 1 Form A AQY PhotoMOS继电器

Panasonic HF SSOP 1 Form A AQY PhotoMOS继电器采用微型SSOP封装,具有600V的负载电压和1500Vrms 的I/O隔离电压 这些继电器具有8Ω的低导通电阻和高速运行的特点,SSOP封装旨在实现高密度安装。Panasonic HF SSOP AQY PhotoMOS继电器适用于从测试和测量设…

【python】冒泡法--详细讲解(python实现)

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

简单工厂模式(Simple Factory)

简单工厂模式,又称为静态工厂方法(Static Factory Method)模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。简单工厂模式不属于GoF的23个…

iPhone 7透明屏的显示效果怎么样?

iPhone 7是苹果公司于2016年推出的一款智能手机,它采用了4.7英寸的Retina HD显示屏,分辨率为1334x750像素。 虽然iPhone 7的屏幕并不是透明的,但是苹果公司在设计上采用了一些技术,使得用户在使用iPhone 7时可以有一种透明的感觉…

虚拟个家用服务器集群(3):更换 PVE 软件源

风无痕 July 31,2023 前言 很多人想建个人博客类的网站,这就需要网站服务器;需要管理手机、电脑中积累的照片,每张照片可都是人生一个片段的记录,需要管理微信中收发的各种文档等等,这就需要一台 NAS 即 Network Att…

教师工作量管理系统Springmvc+Spring+Mybatis课程工作量教室java源代码mysql

本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 教师工作量管理系统SpringmvcSpringMybatis 系统有1权…

800V电驱动产品和技术汇总

文章来源: 赵老师——国汽战略院 汽车电动化研究中心 副主任研究员 需要样件请联:shbinzer 拆车邦 德国采埃孚 采埃孚于2022年量产800V电驱系统,采埃孚电驱传动技术事业部亚太区研发副总裁王岳在《采埃孚新一代超紧凑电驱动系统》报告中展…

【入门SpringCloud(一)】什么是SpringCloud?

一、概述 集群(Cluster):同一种软件服务的多个服务节点共同为系统提供服务过程,称之为该软件服务集群。 分布式(Distribute):分布式是一种系统架构,是将系统中的不同组件分布在不同…

计算机网络期末复习简答题、综合题、实验题答案整理汇总详细(持续更新中)

文章目录 简答题一、第一章:计算机网络概述1. TCP/IP 与 OSI 相结合的五层体系结构将计算机网络划分成哪几个层次?各层的主要功能是什么 二、第二章:物理层1. 交换机、路由器、网卡、网桥、集线器、中继器分别工作在哪一层2. 简述交换机、集线…

10.类型声明文件

类型声明文件的作用是 为已存在的JS库提供类型信息 目录 1 axios中的类型声明文件 2 类型声明文件与普通ts文件的区别 3 vscode中内置的类型声明文件 4 第三方库内置的类型声明文件 5 DefinitelyTyped 提供类型声明文件 6 自定义类型声明文件 6.1 创建给ts用的类…

同为科技(TOWE)带热插拔功能机柜PDU插座的应用

所谓热插拔(hot-plugging或Hot Swap),即带电插拔,指的是在不关闭系统电源的情况下,将模块、板卡插入或拔出系统而不影响系统的正常工作,从而提高了系统的可靠性、快速维修性、冗余性和对灾难的及时恢复能力…

JMeter 的使用

文章目录 1. JMeter下载2. JMeter的使用2.1 JMeter中文设置2.2 JMeter的使用2.2.1 创建线程组2.2.2 HTTP请求2.2.3 监听器 1. JMeter下载 官网地址 https://jmeter.apache.org/download_jmeter.cgi https://dlcdn.apache.org//jmeter/binaries/apache-jmeter-5.6.2.zip 下载解…

Vue2 第十二节 Vue组件化编程 (二)

1. VueComponent 2. 单文件组件 一. VueComponent 组件本质上是一个名为VueComponent的构造函数&#xff0c;不是程序员定义的&#xff0c;是Vue.extend生成的只需要写<school/>或者<school><school/>&#xff0c;Vue解析时&#xff0c;会帮我们创建schoo…

ThinkPHP 6 添加跳转提示扩展 liliuwei/thinkphp-jump

liliuwei/thinkphp-jump 是 TP5 中经典跳转提示&#xff0c;在 TP6 中已经取消&#xff0c;通过 composer 下载该扩展可以在 TP6 中使用 TP5 的跳转提示操作。 安装扩展 在应用根目录执行: composer require liliuwei/thinkphp-jump引入扩展 在全局配置目录生成 jump.php 文件…