python flask框架是什么_Flask框架是什么?带你安装运行第一个Flask程序

5d2453a746a95189.jpg

1 了解框架

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

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

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

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

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

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

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

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

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

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

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

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

1.3 框架的轻重

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

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

2 认识Flask

2.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.2 与Django对比

django提供了:

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

manage.py 管理项目工程

orm模型(数据库抽象层)

admin后台管理站点

缓存机制

文件存储系统

用户认证系统

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

2.3 Flask扩展包:

Flask-SQLalchemy:操作数据库;

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

Flask-Mail:邮件;

Flask-WTF:表单;

Flask-script:插入脚本;

Flask-Login:认证用户状态;

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

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

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

3 安装使用Flask

1. 安装flaskpip3 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.mzph.cn/news/298651.shtml

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

相关文章

还在做互联网创业梦?醒醒!

阅读本文大概需要7分钟。最近国家在互联网领域动作不少:在线教育K12领域被全面整治、阿里被罚款182亿、巨头的垄断和无序扩张遭遇严格限制,大部分互联网上市公司股价一泻千里。身边不少大佬原本身价几千万的期权股票,一瞬间近乎清零&#xff…

android自动登录不过登陆界面,【教程】Android 记住密码和自动登录界面的实现

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼登录界面源码:LoginActivity.javapublic class LoginActivity extends Activity {private EditText userName, password;private CheckBox rem_pw, auto_login;private Button btn_login;private ImageButton btnQuit;p…

钻石2 D2 让你的diamond2待机2天,甚至2天以上的方法(绝对不是购买电池)

http://bbs.23dopod.com/thread-13801-1-1.html 钻石2 D2 让你的diamond2待机2天,甚至2天以上的方法(绝对不是购买电池) 钻石2的性能在这里就不说了,坛友自己都知道但是,钻石2的待机性能的确继承了多普达的传统&#x…

把 14 亿中国人民都拉到一个微信群里在技术上能实现吗?

全世界只有3.14 % 的人关注了爆炸吧知识作者丨Max 链接:zhihu.com/question/293021546/answer/487157602把 14 亿中国人民都拉到一个微信群里在技术上能实现吗?先说结论:也许可以实现,但你会什么都看不见。根据 2017 年《微信数据…

python每天定时9点执行_python 定时器每天就执行一次的实现代码

1.实现功能 编写python脚本一直运行,判断当下是否是新的一天,如果是就执行一次任务代码 2.具体实现代码 #-*-coding:utf-8 -*- __author__ Administrator import os,threading,time curTimetime.strftime("%Y-%M-%D",time.localtime())#记录当…

使用C#为.NET Interactive开发自定义扩展

在前面的文章中,我们介绍了如何在.NET Interactive notebook绘制图表和执行SQL。那么,能不能为.NET Interactive开发交互功能呢?今天,我们就来演示如何实现。创建项目新建类库项目Demo1Extension,需要引用Nuget包Micro…

zabbix snmp自定义OID nginx监控实例(55)

为什么80%的码农都做不了架构师?>>> 为什么要自定义OID? 前面的文章我们已经讲过zabbix如何使用snmp监控服务器,但是他有一个很明显的局限性:只能监控定义好的OID项目,假如我们想知道nginx进程是否在运行…

(转帖)对抽象编程:接口和抽象类

[你必须知道的.NET] 第二回:对抽象编程:接口和抽象类-王涛 [你必须知道的.NET] 第二回:对抽象编程:接口和抽象类 Author:王涛 Date:2007-4-12 ©2007 Anytao.com 转贴请注明出处,留此信息。…

mysql从节点参数配置

官网地址:MySQL :: MySQL Replication :: 2.6.3 Replica Server Options and Variables 欢迎关注留言,我是收集整理小能手,工具翻译,仅供参考,笔芯笔芯. MySQL 复制 / ... / 副本服务器选项和变量 2.6.3 副本服务器…

Windows 7各版本比较

http://windows.microsoft.com/zh-cn/windows7/products/compare家庭普通版 家庭高级版专业版 旗舰版 桌面体验全新的 Windows 任务栏∨∨∨∨实时任务栏缩略图预览∨∨∨∨快速显示桌面∨∨∨∨自定义通知区域图标∨∨∨∨桌面小工具∨∨∨∨半透明玻璃窗口∨∨∨Aero 桌…

实验四 图的遍历算法设计与实现

一、实验名称:图的遍历算法设计与实现 二、实验目的: 1.掌握图的深度优先遍历的算法。 2.掌握图的广度优先遍历的算法。 3.实验章节:算法设计与分析 第四章 三、实验内容。实验问题和程序运行结果 第一部分 广度优先遍历算法 完善下列程序&am…

jpa 定义中间表实体_Spring Data JPA实体详解

1. Spring Data JPA实体概述JPA提供了一种简单高效的方式来管理Java对象(POJO)到关系数据库的映射,此类Java对象称为JPA实体或简称实体。实体通常与底层数据库中的单个关系表相关联,每个实体的实例表示数据库表格中的某一行。2. Spring Data JPA实体管理…

为什么魂斗罗只有128KB却可以实现那么长的剧情?

全世界只有3.14 % 的人关注了爆炸吧知识现代程序员A和1980年代游戏程序员B的对话:A:为什么你用128KB能实现这么多画面、音乐、动画?B:128KB还不够么?其实为了表现力已经相当奢侈了,加了很多不重要的细节。A…

asp.net core 6 新特性,支持HTTP/3 端点发布

???? 序言Http3 协议构建在UDP的基础上,是的,就这么神奇,以前被誉为不稳定大神的UDP,现在承担起可靠通讯协议的底层协议。为了消除UDP的不确定性,在UDP协议之上,新增了QUIC协议。使用QUIC协议代替TCP协…

imac android studio,Mac安装Android Studio的时候忘记安装Avd Manager怎么办?

工作最近得闲,准备学下React-Native。MAC下安装Android Studio的时候,忘记安装Avd Manager。无奈之下删除Android Studio准备重装,却发现有很多配置文件残留在系统上,导致再次重装的时候完全跳过了Avd Manager的配置。在网上找了一…

浮点数赋值给整数_初学者专题:变量和赋值

作者:老齐对于初学Python者,除了看书(《跟老齐学Python:轻松入门》或者《Python大学实用教程》,均为电子工业出版社出版)、或者看视频(网易云课堂、CSDN上均有老齐的视频课程),还要进行专题性总结。比如本文&#xff0…

分析android动画模块[转]

2019独角兽企业重金招聘Python工程师标准>>> 作者: 刘鹏 日期: 2009-03-07 Android 平台提供了两类动画,一类是 Tween 动画,即通过对场景里的对象不断做图像变换(平移、缩放、旋转)产生动画效果;第二类是 Frame 动画,即…

[转载]锦上添花Sybase数据库题目大网罗-4

Q.如何点窜IP地点窜改后的interfaces文件? A.布置SYBASE Adapive Server的呆滞IP地点窜改后, 应点窜 interfaces 文件及有关的设置。   假设 interfaces 文件中哄骗的是呆滞名而不是 IP 地点, 则不需求变化。 但假设客户端连合效力器使   用的是效力器的 转载于…

Nginx+Tomcat动静态资源分离

1 创建用户、用户组 useradd -g users www passwd www //设置密码,否则该用户不可用 groupadd -g 888 www //创建用户组 gpasswd -a www www //将用户www加入用户组www 2 下载nginx、pcre(正则使用) wget http://blog.s135.com/soft/linux/nginx_php/nginx/nginx-0.…

当你的手被502粘住了要怎么做?

1 看清楚,这是大裤衩子▼这才是 jk 裙▼2 天天看你们骂海王男友其实我有一个河神男友▼3 当你的手被502粘住了怎么办?▼4 不能指望食堂阿姨了自己动手丰衣足食▼5 当你被别人夸奖时▼6 宅在家里也能拍大片▼7 是我本人没错了▼你点的每个赞&#…