Flask实战脚手架-项目创建

实战脚手架准备分三部曲

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.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_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这就说明基本框架已起正常运行了

下一步

【Flask实战脚手架-用户模块】

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容