一、好的学习者应该是一位大脑筑构师
个人认为,对于一个初学者来说,一个好的学习过程,并不是完全照本宣科,教条式的学习,而是应该首先在我们内心建立起一个对于这个知识体系的世界观,作为这个世界的框架,再往这个框架里填充方法论,这一过程既是在学习新的知识,同时,又是在验证、加固和完善我们最初的世界观。
二、当我们在搭建服务器时,我们究竟在搭建什么?
我们首先应该明确目标,【服务器】究竟是做什么用的,或者说,它的基础核心功能是什么,是不是能用一句话来概括?以我现在的知识水平,我想用这么一句话来概括:
服务器的职责服务器,首先是一个对外的称呼,它用以接收外部的请求,调用内部的资源去处理请求,并最终将处理后的结果以响应的形式返回给外部的调用者。
对此,我总结了服务器的三大基本职责:
- 接收请求(打开冰箱)
- 处理请求(把大象装进去)
- 发送响应(把冰箱门带上)
这有点像把大象装进冰箱的步骤解析一样(哈哈),无论这个所谓的【大象】有多大、多小,但是万变不离其宗,总的操作步骤还是一样的。
我们要做的就是保证这三个基本职责【安全】、【稳定】、【高效】地提供到位。
三、为什么需要虚拟环境?
这也是我在开始学习Python时的一个困惑,可能能因为我当时知识碎片化的学习,一直都是用的非虚拟环境,当看到很多地方只是告诉我们要通过虚拟环境来开发Python,却没有告诉我们为什么要这样做,我的心里就一直有这个困惑,直到我开发了两个以上的项目,我才意识到,其实这一切都基于版本控制(所谓的“环境”),那么版本控制究竟有多重要呢?
我最开始理解的,我们引用的第三方库就像是我们手机里的各类APP,我们的Python就像是手机系统。那么Python有新版本了,从3.6升级到了3.7,又升级到3.8、3.9,那么我们在运行新项目的时候,我们只需要将Python升级到最新版本,就像我们的iPhone手机从iOS 6 一年一年地升级到 iOS 14那么自然!~
然而,现实情况是,版本的升级,意味着内部实现原理的改变,而这意味兼容性的问题。最直观的例子就是,假设原先的一个方法,它的语法完全变了,而这时候如果你集成了多个第三方库,而每个第三方库只支持特定版本及以上的Python特性,兼容性的复杂程度将成几何形成长。这还只是一个项目,当多个项目引用的虽然是同一个第三方库,可是它们依赖的是不同的版本,怎么办?虚拟环境就是创建了一个专属空间,当前项目的所有依赖,都从这个专属空间里引用,即 专属的第三方库,专属的指定版本。
专属空间,才是虚拟环境的意义所在。
每个深刻理解版本控制的重要性的开发者,一定是之前踩过不少这样的坑,所以我们哪怕用高中时学过的【控制变量法】也能联想到,版本控制的精髓,就是控制版本最好不要变化,如果一定要升级,请同时测量所有其他的变量(引用到的第三方库)是否支持,不会出现预期以外的程序BUG!
对于服务器的项目尤其重要,因为它是一个服务于大量设备的载体,每天要承接大量的服务,并且有时它还需要快速移植到其它设备上,虚拟环境其实是提供了一个方便移植的版本集群的抓手,让你能够快速处理那些本来深度耦合在项目内部的第三方库。
因此,我推荐使用pipenv来作为第三方库及版本控制工具。它自动生成的版本配置文件,可以帮我们省去很多事儿。这个东西后面搭建时会用到,但在此我只会讲简单提到,有时间我会专门开一篇文章讲它的用法,并把链接贴到此处。
四、使用Flask快速搭建一个服务器
首先声明,本人的开发学习环境是Windows系统、Annaconda提供的Python 3.8解释器、Pycharm集成开发环境,为了方便流程表述,后面都将基于以上环境讲解,但还是我说的那句话,整体知识框架是不变的,唯一有区别的是一些小的细节方法论。
3.1 第三方库管理工具pipenv
如果你已经安装了pipenv可以跳过本小节。如果你没有安装过,请在命令行工具中执行以下代码:
pip install pipenv
3.2 为工程创建虚拟环境
无论是新创建的工程(直接新建时设置),还是以前已经存在的老工程(在项目设置里),都可以设置环境。
设置界面
选择Pipenv来创建虚拟环境,并选择一个已有的Python版本(如果你有2个以上的Python版本的话),点击确定后,创建。
简单的来说,Pipenv会为你在“C:\Users\Administrator.virtualenvs\”目录下创建一个“当前项目名+一串随机字符”的目录,专门存放你的虚拟环境文件。 你可以在设置的python解释器里查看验证:
虚拟环境的本地路径
3.3 下载安装其它第三方依赖库
如果这是一个新项目,你只需要安装Flask就可以了:
pipenv install flask
但如果这是一个克隆的项目,本身有很多第三方依赖库,而且之前也是用pipenv做的版本控制,根目录下其实会有一个专属的【配置清单】文件名是“Pipfile.lock”,这个lock是什么意思?这些第三方库还有它们的版本,我pipfile给你们都“锁死”了!~ 哈哈,是不是多了几分综艺感呢?突然就想吃瓜了有没有?~ 咳咳……言归正传,如果有pipfile.lock的话,你只需要:
pipenv install
install后面什么都不加,pipenv老兄会自动帮你把配置清单上的依赖都安装好,是不是很方便?这就是我推荐你的原因(哈哈)~
3.4 后端代码
- 将入口文件起名为app.py
- 在app.py中输入以下代码:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return '<h1>Hello Flask!</h1>'
【解析】
前面两句是引入Flask模块,并且完成初始化配置。
后面的函数是一个视图函数,在外部设备发送根目录请求时(接收请求),返回一个Hello Flask!的h1标签(处理业务+发送响应)。
3.5 让Flask跑起来
你不能像其它Python项目那样,直接run app.py去运行,而是需要调用flask run指令去驱动app.py。 怎么做呢?
- 通过命令行
> pipenv shell
> flask run
-
Pycharm运行的配置文件
1)选择“编辑配置”
2)添加新配置
给这个配置起个名字,切换到模块调用模式,设置模块名和调用参数,python解释器已经自动为我们定位到虚拟环境了,但是工作路径程序没法自动探测到,因此需要我们手动定位到工程的本地路径:
3)设置参数
此时我们切换到这个配置,点击【run】就可以运行了,以后都可以直接【run】来启动。
执行
3.5 Flask世界观搭建成功!
运行成功后,控制台会显示当前的域名:
你的本地服务器网址
用浏览器访问控制台输出的网址,你终于和Flask完成了第一次对话,效果图:
完成最小功能的服务器
至此,你已经真正完成并启动了一个Flask后端服务器,恭嗨雷呀!
服务器的职责可以再回顾一下前文说的,服务器的三大基本职责,
- 此时外部设备是【浏览器】
- 而它发送的请求是【127.0.0.1:5000】
- 服务器接收到请求,并做了相应的处理
- 最终返回一个h1标签的大写标题【Hello Flask!】
我是Darry,一名大脑构筑师,如果这篇文章有帮助到你,欢迎点赞收藏,我去写下一篇文章去了,白白┏(^0^)┛
网友评论