为了账号安全,请及时绑定邮箱和手机立即绑定

Flask实战脚手架-项目创建

标签:
Python

暂定功能模块:

  • 用户模块

  • 文章模块

用到的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.pycli.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


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消