什么是服务器?用Flask快速搭建最小服务器

一、好的学习者应该是一位大脑筑构师

个人认为,对于一个初学者来说,一个好的学习过程,并不是完全照本宣科,教条式的学习,而是应该首先在我们内心建立起一个对于这个知识体系的世界观,作为这个世界的框架,再往这个框架里填充方法论,这一过程既是在学习新的知识,同时,又是在验证、加固和完善我们最初的世界观。

二、当我们在搭建服务器时,我们究竟在搭建什么?

我们首先应该明确目标,【服务器】究竟是做什么用的,或者说,它的基础核心功能是什么,是不是能用一句话来概括?以我现在的知识水平,我想用这么一句话来概括:

服务器,首先是一个对外的称呼,它用以接收外部的请求,调用内部的资源去处理请求,并最终将处理后的结果以响应的形式返回给外部的调用者。

服务器的职责

对此,我总结了服务器的三大基本职责:

  1. 接收请求(打开冰箱)
  2. 处理请求(把大象装进去)
  3. 发送响应(把冰箱门带上)

这有点像把大象装进冰箱的步骤解析一样(哈哈),无论这个所谓的【大象】有多大、多小,但是万变不离其宗,总的操作步骤还是一样的。
我们要做的就是保证这三个基本职责【安全】、【稳定】、【高效】地提供到位。

三、为什么需要虚拟环境?

这也是我在开始学习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 后端代码

  1. 将入口文件起名为app.py
  2. 在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。 怎么做呢?

  1. 通过命令行
> pipenv shell
> flask run
  1. Pycharm运行的配置文件


    1)选择“编辑配置”

    2)添加新配置

    给这个配置起个名字,切换到模块调用模式,设置模块名和调用参数,python解释器已经自动为我们定位到虚拟环境了,但是工作路径程序没法自动探测到,因此需要我们手动定位到工程的本地路径:


    3)设置参数

    此时我们切换到这个配置,点击【run】就可以运行了,以后都可以直接【run】来启动。
    执行

3.5 Flask世界观搭建成功!

运行成功后,控制台会显示当前的域名:


你的本地服务器网址

用浏览器访问控制台输出的网址,你终于和Flask完成了第一次对话,效果图:


完成最小功能的服务器

至此,你已经真正完成并启动了一个Flask后端服务器,恭嗨雷呀!

服务器的职责

可以再回顾一下前文说的,服务器的三大基本职责,

  • 此时外部设备是【浏览器】
  • 而它发送的请求是【127.0.0.1:5000】
  • 服务器接收到请求,并做了相应的处理
  • 最终返回一个h1标签的大写标题【Hello Flask!】

我是Darry,一名大脑构筑师,如果这篇文章有帮助到你,欢迎点赞收藏,我去写下一篇文章去了,白白┏(^0^)┛

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容