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实战脚手架-用户模块】

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,376评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,126评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,966评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,432评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,519评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,792评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,933评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,701评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,143评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,488评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,626评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,292评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,896评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,742评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,324评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,494评论 2 348

推荐阅读更多精彩内容