1.初始化——Flask从制作到起飞,零件级颗粒度制造

写在前面的话:
作者是一名终身学习者,横跨环境、教育和IT三个行业。
IT是当前正在精进的行业,作者相信专业精神,崇尚知行合一。
作者以这个系列文章向每一个脚踏实地的web开发者致敬,希望能写出高度实用又有深度的文章帮路上的你清除障碍,欢迎你的指正和技术交流。

1.Github

首先在github上创建一个repository,名字是FlaskTemplate。接下来找到一个本地路径初始化项目,例如放在home下:

$ cd ~  # 进入home目录
$ git clone git@github.com:Sisyphus235/FlaskTemplate.git  # 拉取线上开源项目

检查初始化状态

$ cd FlaskTemplate  # 进入项目路径
$ git remote -v  # 检查git远程源
origin  git@github.com:Sisyphus235/FlaskTemplate.git (fetch)
origin  git@github.com:Sisyphus235/FlaskTemplate.git (push)
# origin是git remote的名字,后面是git remote的地址

2.Virtual Environment

接着为项目配置虚拟环境,与本机其他环境隔离,好处是方便做包管理工作,项目配置与本机解耦合,方便未来项目部署。

$ virtualenv venv --python=python3  # 用python3创建一个虚拟环境,名字是venv

检查创建结果,使用pycharm打开项目,在FlaskTemplate中会出现venv的directory,接着在Pycharm-Preferences-Project:FlaskTemplate-Project Interpreter中点击设置的按钮ADD。


image

选择Virtualenv Environment中的Existing environment,在其中找到刚刚创建路径下的venv,确认。


image

检查虚拟环境的IDE配置,在pycharm的terminal中验证:
(venv) ➜  FlaskTemplate git:(master) ✗ which python
~/FlaskTemplate/venv/bin/python  # 路径在FlaskTemplate的venv下面是正确的

3.Flask Initiation

然后实现最简单的Flask代码。

  • 安装flask package
    在pycharm的terminal中安装flask
(venv) ➜  FlaskTemplate git:(master) ✗ pip install flask
Installing collected packages: MarkupSafe, Jinja2, itsdangerous, Werkzeug, click, flask
Successfully installed Jinja2-2.10 MarkupSafe-1.1.0 Werkzeug-0.14.1 click-7.0 flask-1.0.2 itsdangerous-1.1.0
  • 在FlaskTemplate根路径下创建core.py文件,最短代码实现一个web server。core.py的代码如下
- FlaskTemplate
    - venv
    - core.py
    - README.md  # 创建git仓库时选择生成的说明文档
# 下面这行是shebang,用来避免编码错误,例如如果一行字符超过1024byte,在没有注明解码方式的时候,python默认会截取1024byte,如果刚好末位碰到utf8中间的位置,会报错。
# -*- coding: utf8 -*-

# 最核心的服务导入,Flask提供后端服务
from flask import Flask

# 通过Flask实例化一个app,后端服务都是在这个实例的功能下实现的
app = Flask(__name__)


# 向app添加一个路由,路径是"/",这里是根目录,所以定义了一个index页面,页面显示一句提示
@app.route('/')
def index():
    return "<h1>This is an index page.<h1/>"

# 最短小服务的启动位置,app启动run方法,在localhost下的5000端口以debug模式启动
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

image

注意,访问服务的时候不要使用0.0.0.0:5000,而要使用localhost:5000或者127.0.0.1:5000。
127.0.0.1是一个"fake" network adapter,只接受相同host的请求,也就是只接受本地连接。
localhost一般是127.0.0.1的hostname,在/etc/hosts下设置(Linux or Mac)
0.0.0.0有多重含义,这里的意思是"listen on every available network interface"。
也就是说,代码中app.run的host如果改成127.0.0.1在这里也是可以启动的。

查看本机的hostanme方法如下:

$ cat /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1   localhost
255.255.255.255 broadcasthost

4.Future

提交代码,一般推荐使用pull request的方法来协作,方便code review。这里是一个独立项目,直接推送到github的master分支。

  • 设置gitignore文件
    有些文件是本地使用的,不应该放入git的文件版本管理系统,例如上面生成的虚拟环境。
    在根目录下新建.gitignore
- FlaskTemplate
    - venv
    - core.py
    - README.md  # 创建git仓库时选择生成的说明文档
    - .gitignore  # 非git版本管理文件
#pycharm
.idea/

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
env/
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# dotenv
.env

# virtualenv
.venv
venv/
ENV/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
  • 提交.gitignore
    这里要注意,不要直接提交前面写好的代码,不然venv等不希望进入git版本管理的代码会被记录,要写提交.gitignore文件。
$ git status  # 查看当前文件版本情况
$ git add .gitignore  # 将.gitignore加入版本管理
$ git commit -m "add .gitignore"  # 提交.gitignore设置
  • 提交其他代码
$ git status  # 查看当前文件版本情况
$ git add core.py  # 将.gitignore加入版本管理
$ git commit -m "develop simplest flask server"  # 提交.gitignore设置
  • 同步本地开发到github
$ git push orign master -f  # 将本地master分支强制推送到origin远程源并覆盖

至此,一个最简洁的flask server完成,后续文章会在此基础上不断模块化,增加功能,并探索更科学的web server架构。

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

推荐阅读更多精彩内容