实战脚手架准备分三部曲
Flask实战脚手架 (后端+restful api)
Yii2实战脚手架 (后端+restful api)
Vue2实战脚手架(前端)
Flask实战脚手架 (后端+restful api)
学习Flask从实战开始,制作一个web常用的脚手架,已备以后快速开发。
项目git地址第一次提交
暂定功能模块:
- 用户模块
- 文章模块
用到的python插件:
Flask-Login #用户登陆
Flask-Migrate #数据库管理工具
Flask-DebugToolbar #dubug工具栏
Flask-SQLAlchemy #ORM
Flask-WTF #表单
项目目录结构
myweb
│
└───app #此为应用主目录
│ │
│ └───backend #应用分组模块,这样区分的好处是结构化
│ │ │ __init__.py
│ │ │ forms.py #表单集合
│ │ │ views.py #路由
│ │
│ └───static #静态的文件,如jpg、css、js
│ │ │ ...
│ │
│ └───templates #模板文件
│ │ └───backend #对应app/backend模板目录
│ │ └───layout #模板布局目录
│ │
│ │ __init__.py
│ │ cli.py #这里集中管理注册的命令
│ │ config.py #这里集中管理配置的文件
│ │ models.py #这里集中管理数据模型
│
│ run.py #单独剥离出来的运行文件,文件调试,比如```cli、flask shell```
│
└───venv #python3 -m venv venv虚拟环境
项目的结构化的整理主要是为了合理的管理项目,但都是自由化的,比如
app/models.py
他是管理数据模型的里面有User、News...
等,但是当表模型很多的情况下完全可以升级他,比如删除models.py
接着新建一个models
文件夹,在里面创建User.py、News.py...
一切的一切只是为了更好的管理项目。
1. 搭建虚拟环境
创建一个目录myweb,并进入目录,创建python3的虚拟环境
mkdir myweb && cd myweb
python3 -m venv venv #创建指定的venv
. venv/bin/action #启动虚拟环境
2. 创建配置文件
app/config.py
import os
basedir = os.path.abspath(os.path.dirname(__name__))
class Config(object):
SECRET_KEY = os.environ.get('SECRET_KEY') or '!@#$%^&*12345678'
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db')
SQLALCHEMY_TRACK_MODIFICATIONS = False
DEBUG_TB_INTERCEPT_REDIRECTS = False #这配置debug的工具栏不拦截302跳转
class DevelopmentConfig(Config):
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db')
class ProductionConfig(Config):
SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'app.db')
配置一个默认的,开发的,线上的。
3. 创建应用工厂 app/__init__.py
from flask import Flask #导入flask
from app.config import Config #导入配置文件中的Config
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(config_class)
return app
流水线导入所需要的插件,之后在create_app
里面初始化init_app()
。 init_app()这个会把插件挂载到app应用上
4. 创建命令 app/cli.py
def register(app):
@app.cli.command('add_account', short_help='添加账号')
def add_account():
pass
在这里集中放命令,这里的方法会在run.py
的cli.regiter(app)
把create_app
创建的返回对象注入进去,就可以flask add_account
就可以使用此命令了。
5. 创建运行入口 run.py
from app import create_app, cli
app = create_app()
cli.register(app)
@app.shell_context_processor
def make_shell_context():
return {
'app': app
}
flask shell
进入shell环境,就可以使用 @app.shell_context_processor
压入的dist,而不需要手动进入 form app import app
现在我们可以试着运行下项目了,先安装所需要的Flask。
pip install flask
export FLASK_APP=run.py
export FLASK_ENV=development
✗ flask shell
Python 3.7.0 (default, Jul 23 2018, 20:22:55)
[Clang 9.1.0 (clang-902.0.39.2)] on darwin
App: app [development]
Instance: /Users/jydd/python/myweb/instance
>>> app
<Flask 'app'>
给项目加把锁,用git版本控制
.gitignore
venv/
*.pyc
__pycache__/
instance/
到这里我们试试项目是否正常可用。我们在工厂函数那加一个视图测试看看 app/__init__.py
from flask import Flask #导入flask
from app.config import Config #导入配置文件中的Config
def create_app(config_class=Config):
app = Flask(__name__)
app.config.from_object(config_class)
@app.route('/')
def index():
return 'index'
return app
访问http://127.0.0.1:5000 正常情况下会显示 index这就说明基本框架已起正常运行了