暂定功能模块:
用户模块
文章模块
用到的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 #导入flaskfrom app.config import Config #导入配置文件中的Configdef 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_processordef 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.pyexport 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 #导入flaskfrom app.config import Config #导入配置文件中的Configdef 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这就说明基本框架已起正常运行了
作者:七霸刀
链接:https://www.jianshu.com/p/3b7472c8812b
共同学习,写下你的评论
评论加载中...
作者其他优质文章