写在前面的话:
作者是一名终身学习者,横跨环境、教育和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。
选择Virtualenv Environment中的Existing environment,在其中找到刚刚创建路径下的venv,确认。
检查虚拟环境的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)
注意,访问服务的时候不要使用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架构。