2021年10月24日所学(个人笔记)

Flask框架

Flask介绍

  • Flask的核心在于Werkzeug(路由模块), Jinja2模板引擎
  • 类比Django:路由、模板、ORM
  • Flask要完成功能,依赖于丰富的插件(扩展模块)
  • 常问问题:Django与Flask有什么区别

在谈Python中Django框架和Flask框架的区别之前,我们需要先探讨如下几个问题:

  1. 为什么要使用框架?

为了更好地阐述这个问题,我们把开发一个应用的过程进行类比,往往开发一个应用(web应用、系统应用)跟建造房子的过程一样,需要先打地基,搭好骨架,然后一块砖一块砖叠上去。

而开发一个应用呢?同样也需要一个好的架构设计,数据库建模,然后一个模块一个模块使用代码实现。

如果开发一个软件应用不使用框架,和我们建房子时,每一块砖、每一根钢筋都需要自己生产出来本质上是一样的。

显而易见,如果在建造房子之前,每一块砖头、每一种建材,都需要我们自己去生产的话,建造房子的效率是极低的,

甚至可能一辈子也无法把房子建造好。

在开发应用系统时,使用框架可以带来如下好处:

— 大大提升开发效率

— 让应用开发更加规范、拓展性更强

— 让程序员把更多的精力放在业务逻辑的实现上,而不是重复、而复杂的基础环境上(比如web服务器、底层实现等)

  1. 为什么使用Django和Flask框架?

在Python编程语言的世界里,功能最强大、最流行的两个框架。

不仅在web后端开发、微服务开发,同时在ERP系统开发、API接口开发等领域,这两个框架应用非常广泛。

  1. Django和Flask的区别

形象类比

如果Django类似于精装修的房子,自带豪华家具、非常齐全功能强大的家电,什么都有了,拎包入住即可,十分方便。

而Flask类似于毛坯房,自己想把房子装修成什么样自己找材料,买家具自己装。材料和家具种类非常丰富,并且都是现成免费的,直接拿过去用即可。

在体量上的区别

Flask:

  • 小巧、灵活,让程序员自己决定定制哪些功能,非常适用于小型网站。
  • 对于普通的工人来说将毛坯房装修为城市综合体还是很麻烦的,使用Flask来开发大型网站也一样,开发的难度较大,代码架构需要自己设计,开发成本取决于开发者的能力和经验。

Django:

  • 大而全,功能极其强大,是Python web框架的先驱,用户多,第三方库极其丰富。
  • 非常适合企业级网站的开发,但是对于小型的微服务来说,总有“杀鸡焉有宰牛刀”的感觉,体量较大,非常臃肿,定制化程度没有Flask高,也没有Flask那么灵活。

完成同样一个Hello World功能

使用Flask来完成:

  • 第一步,安装Flask,pip install flask
  • 第二步,创建my_first_app.py文件,添加如下代码

from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello Word' if __name__ == '__main__': app.run(host='127.0.0.1',port=8888,debug=True)

完成最简单的Hello World功能,Flask只需要7行代码,非常简单、方便。

使用Django来完成:

  • 第一步,安装Django,pip install django
  • 第二步,创建工程项目目录,django-admin startproject myproject
  • 第三步,创建子应用,python manage.py startapp myapp
  • 第四步,在myapp应用所在目录中的views.py文件中,添加如下代码

from django.http import HttpResponse def index(request): return HttpResponse("Hello Word")

  • 第五步,在myapp应用所在目录中创建urls.py路由文件,并添加如下代码

from django.conf.urls import url from . import views urlpatterns = [ url(r'^$',views.index,name='index') ]

  • 第六步,在主路由文件中添加路由。

从上面的操作步骤可知,实现同样的一个功能,往往Flask较为简单,代码较少,而Django所涉及到的流程较多,工程项目结构清晰,在大型项目中具有优势。

  1. 在实际工作中如何选择这两个框架呢?

如果你想搞懂Python web开发WSGI协议原理以及实现过程、或者你想灵活定制组件,完全DIY你的应用、想实现微服务,那么建议你选择Flask。

如果你关注产品的最终交付、想快速开发一个大的应用系统(比如新闻类网站、商城、ERP等),那么建议你选择Django,你想得到的功能它都有,想不到的功能它也有。

  1. 如何才能学好框架呢?

需要先学习框架的基础知识、基本实现原理。

结合项目实践,提升编码能力和业务逻辑的理解。

翻看框架源码,深入理解源码精髓。(进阶)

环境搭建

virtualenvwrapper 来创建、管理我们的虚拟环境

开发中,我们一个项目是要对应应虚拟环境的

  • 安装 虚拟环境

pip install virtualenvwrapper-win

  • 配置虚拟环境主目录

在windows上环境变量中 添加 环境变量 WORKON_HOME

配置上目录 D:\virtual_envs

  • 虚拟环境操作

创建虚拟环境

mkvirtualenv 虚拟环境名

查看所有虚拟环境

workon

激活(切换)虚拟环境

workon 虚拟环境名 C:\Users\沐沐>workon jiyun (jiyun) C:\Users\沐沐> deactivate

查看命令是否在虚拟环境中,要看 命令行的前缀是否有括号(虚拟环境名)

移除虚拟环境

rmvirtualenv 虚拟环境名

退出虚拟环境

deactivate

  • 安装Flask

pip install flask==1.0.2

  • pip高级使用

导出环境中所有的包

pip freeze > C:\Users\沐沐\Desktop\requirements.txt

在环境中批量安装包(终端)

(newenv) C:\Users\沐沐>cd Desktop (newenv) C:\Users\沐沐\Desktop>pip install -r requirments.txt

实现Flask入门应用

# 实现步骤: # 1.导入Flask类 from flask import Flask # 2.实例化Flask对象 app = Flask(__name__) # 3.编写路由与视图 @app.route('/') def index(): return 'Hello Flask' # 4.启动服务 if __name__ == '__main__': app.run()

# 知识点抽取: 1.实例化Flask对象: app = Flask(__name__) 1).__name__参数用于确定启动程序的位置 2).__name__参数可以传递除了标准模块名的任意字符串, 但不推荐 3).__name__参数如果传递标准模块名, 不影响路由的匹配, 但会影响静态文件的加载 2.@app.route('/'): 路由配置 @app.route('路由')是以装饰器的形式构建路由的, 其第一个参数为路由路径 3.app.run(): Flask实例的方法, 用于启动web服务, 可选参数如下: - host: 服务启动的IP地址 - port: 服务启动的端口 - debug: 是否以调试模式启动 示例: app.run(host='127.0.0.1', port=8899, debug=True)

Flask项目配置

# Flask项目配置文件加载方式: 1.从配置对象中加载 2.从配置文件中加载 3.从环境变量中加载

  • Flask配置理解

app.config 是一个类字典的对象,里面已经有了很多默认的配置。我们可以向里面添加自己新的配置

向配置中添加配置

# 配置信息 print(app.config) app.config["ROOM"] = "407" app.config["MYSQL_HOST"] = "127.0.0.1"

从配置中获取配置变量对应的值

# 获取配置中的信息 print(app.config["ROOM"]) print(app.config["MYSQL_HOST"])

  • 配置对象加载

实现步骤: - 创建配置类(建议单独文件中创建) - 加载配置对象 - 使用配置

示例:

settings.py代码: # 定义一个配置类 # 属性 必须是 全大写 class Config: # 配置 属性=值 ROOM = "407" MYSQL_HOST = "127.0.0.1"

Flask实例文件(app.py)代码: from flask import Flask # 导入配置类 from settings import Config def create_app(config): app = Flask(__name__) # 从对象加载配置 app.config.from_object(config) return app # 获取配置信息 # get方式调用配置 print(app.config.get("ROOM")) print(app.config.get("MYSQL_HOST")) # 字典键值方式调用配置 print(app.config['ROOM']) print(app.config['MYSQL_HOST'])

  • 配置文件加载—我们直接把配置信息 写入到文件中,然后去加载

实现步骤: - 创建配置文件(py文件或其他格式文件均可) - 加载配置文件 - 使用配置

示例:

settings.py代码: ROOM = "3308" MYSQL_HOST = "192.168.0.54"

Flask实例文件(app.py)代码: from flask import Flask app = Flask(__name__) # 从文件加载配置 app.config.from_pyfile('settings.py') # 获取配置信息 print(app.config['ROOM']) print(app.config['MYSQL_HOST']) print(app.config.get("ROOM")) print(app.config.get("MYSQL_HOST")) if __name__ == '__main__': app.run()

  • 环境变量中加载

实现步骤: - 创建配置文件(存放敏感信息, 不与项目同目录) - 添加配置文件环境变量 - 获取配置

我们在pycharm中定义一个环境变量,这个环境变量指向一个目录下的文件

我在桌面上创建一个a.txt文件 写入如下内容:

ROOM="999" MYSQL_HOST="99.88.89.11"

在pycharm中定义一个环境变量 aaa 指向 a.txt文件,如下图:

0

0

0

0

在flask中使用 这个环境变量aaa,代码如下:

app.py代码: app = Flask(__name__) app.config.from_object(Config) app.config.from_pyfile("settings.py") app.config.from_envvar("aaa") print(app.config.get("ROOM")) print(app.config.get("MYSQL_HOST"))

  • 三种配置方式对比:

从对象加载配置: 配置方式灵活, 可复用性强, 但不安全

从文件加载配置: 复用性不好, 也不安全, 但是官方推荐用法

从环境变量加载: 相对安全, 利于配置敏感信息, 推荐使用

扩展1:

为什么要安装虚拟环境?

虚拟环境可以让系统Python环境保持纯洁,干净,避免包的混乱和版本的冲突。专为不同的项目搭建不同的环境,为每个项目使用虚拟环境可以保证项目只访问虚拟环境中的包,从而保持全局解释器的干净整洁,使其只作为创建虚拟环境的源.

扩展2:

我们要把自己项目给 其他人,我们需要给什么?

代码+依赖库(requirments.txt)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值