25、Flask实战第25天:项目结构搭建
创建一个虚拟环境bbs,并安装flask框架
#cmd进入DOS窗口 mkvirtualenv bbs
pip install flask
在本地磁盘D新建项目目录:bbs
打开pycharm,创建flask项目
新建两个文件,config.py( 配置文件)、exts.py(用于第三方库)
项目分为前台(front)、后台(cms)、公共(common)
因此这里配置上面3个蓝图
新建一个python package命名为apps,在apps下新建三个python package分别命名为:cms、common、front
这3个蓝图都会有自己的数据模型和视图,则在它们各自下新建文件models.py、views.py,前台和后台肯定会有表单验证,因此也新建forms.py
cms.view.py
from flask import Blueprint bp = Blueprint('cms', __name__, url_prefix='/cms') @bp.route('/')
def index():
return 'cms index'
common.py
from flask import Blueprint bp = Blueprint('common', __name__, url_prefix='/common') @bp.route('/')
def index():
return 'common index'
front.py
from flask import Blueprint bp = Blueprint('front', __name__) #因为前台是直接访问就不用加url_prefix @bp.route('/')
def index():
return 'front index'
编辑cms.__init__.py、common.__init__.py、front.__init__.py,这样做的好处就是可以这样导入蓝图:from apps.cms import bp
from .views import bp
编辑bbs.py注册蓝图,该文件不编辑任何视图及url
from flask import Flask
import config
from apps.cms import bp as cms_bp
from apps.common import bp as common_bp
from apps.front import bp as front_bp app = Flask(__name__)
app.config.from_object(config) #引入配置文件 app.register_blueprint(cms_bp)
app.register_blueprint(common_bp)
app.register_blueprint(front_bp) if __name__ == '__main__':
app.run()
编辑config.py开启DEBUG模式
DEBUG = True
最后启动项目
配置数据库信息创建数据库
MySQL创建数据库bbs
address: 127.0.0.1:3306
database: bbs
username: root
password: 123456
安装相关的库
workon bbs #进入虚拟环境
pip install pymysql
pip install flask-sqlalchemy
pip install flask-script
pip install flask-migrate
编辑配置文件config.py配置数据库连接信息
DEBUG = True #MySQL Database
HOST = '127.0.0.1'
PORT = ''
USERNAME = 'root'
PASSWORD = ''
DATABASE = 'bbs' DB_URI = 'mysql+pymysql://{username}:{password}@{host}:{port}/{db}?charset-utf8'.format(username=USERNAME,
password=PASSWORD,
host=HOST,
port=PORT,
db=DATABASE)
SQLALCHEMY_DATABASE_URI = DB_URI
SQLALCHEMY_TRACK_MODIFICATIONS = False
编辑exts.py初始化SQLAlchemy
from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy()
创建一个manage.py用来写迁移脚本
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from bbs import app
from exts import db manager = Manager(app) Migrate(app, db)
manager.add_command('db', MigrateCommand) if __name__ == '__main__':
manager.run()
在主程序bbs.py给db传入app
from exts import db
... db.init_app(app)
初始化迁移脚本
D:\bbs>workon flask-env
(flask-env) D:\bbs>python manage.py db init
25、Flask实战第25天:项目结构搭建的更多相关文章
- MVC 实用构架实战(一)——项目结构搭建
一.前言 在<上篇>中,已经把项目整体结构规划做了个大概的规划.在本文中,将使用代码的方式来一一解说各个层次.由于要搭建一个基本完整的结构,可能文章会比较长.另外,本系列主要出于实用的目的 ...
- 使用.NET 6开发TodoList应用(2)——项目结构搭建
为了不影响阅读的体验,我把系列导航放到文章最后了,有需要的小伙伴可以直接通过导航跳转到对应的文章 : P TodoList需求简介 首先明确一下我们即将开发的这个TodoList应用都需要完成什么功能 ...
- NET 项目结构搭建
NET 项目结构搭建 我们头开始,从简单的单项目解决方案,逐步添加业务逻辑的约束,从应用逻辑和领域逻辑两方面考虑,从简单的单个项目逐步搭建一个多项目的解决方案.主要内容:(1)搭建应用逻辑和领域逻辑都 ...
- vue2项目结构搭建
vue2项目结构初搭建与项目基本流程 一.开始项目结构搭建的重要性 决定项目是否能够健康成长 决定了项目是否利于多人协作开发 决定了项目是否利于后期维护 决定了项目是否性能良好 决定了代码是否重用率降 ...
- SpringMVC+Spring+mybatis项目从零开始--分布式项目结构搭建
转载出处: SpringMVC+Spring+mybatis+Redis项目从零开始--分布式项目结构搭建 /** 本文为博主原创文章,如转载请附链接. **/ SSM框架web项目从零开始--分布式 ...
- 架构系列:ASP.NET 项目结构搭建
我们头开始,从简单的单项目解决方案,逐步添加业务逻辑的约束,从应用逻辑和领域逻辑两方面考虑,从简单的单个项目逐步搭建一个多项目的解决方案.主要内容:(1)搭建应用逻辑和领域逻辑都简单的单项目 (2)为 ...
- vue2.0 仿手机新闻站(二)项目结构搭建 及 路由配置
1.项目结构 $ vue init webpack-simple news $ npm install vuex vue-router axios style-loader css-loader -D ...
- 从零开始Vue项目实战(三)-项目结构
目录结构 ├── README.md 项目介绍 ├── index.html 入口页面 ├── build 构建脚本目录 │ ├── build-server.js 运行本地构建服务器,可以访问构建后 ...
- 实战_2:eclipseRCP项目结构
RCP项目目录结构如下: src: java源码目录 bin:class文件目录 JRE System Library: 系统类库依赖,主要是JDK,JRE相关的 Plugin-in Dependen ...
随机推荐
- jQuery拖拽 & 弹出层
了解更多请查看 官网 和 API iDrag & iDialog 介绍 特点: iDialog.js依赖于jquery编写的简单易用的对话框,同时还可以通过添加css3,改变对话框的展现动画. ...
- HDFS fs 基本命令
https://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common/FileSystemShell.html#Overvie ...
- 【NOIP】2013提高组 花匠(摆花)
[算法]DP||贪心 [题解] (1)动态规划: 令f[i][0..1]为两种条件下前i株花的最大保留数量,状态转移方程: f[i][0]=max(f[j][1]+1) (j=i-1...1)(h[i ...
- HDU 1159 Common Subsequence (dp)
题目链接 Problem Description A subsequence of a given sequence is the given sequence with some elements ...
- elementui table 多选 获取id
//多选相关方法 toggleSelection(rows) { if (rows) { rows.forEach(row => { this.$refs.multipleTable.toggl ...
- 抓起根本(二)(hdu 4554 叛逆的小明 hdu 1002 A + B Problem II,数字的转化(反转),大数的加法......)
数字的反转: 就是将数字倒着存下来而已.(*^__^*) 嘻嘻…… 大致思路:将数字一位一位取出来,存在一个数组里面,然后再将其变成数字,输出. 详见代码. while (a) //将每位数字取出来, ...
- ssh日常优化使用
config文件的使用 ssh命令默认会加载 ~/.ssh/config 文件作为配置文件,如果没有则采用默认配置.如果我们想要对ssh进行定制,那么就可以使用如下方法 [root@linux-nod ...
- 设计模式之笔记--抽象工厂模式(Abstract Factory)
抽象工厂模式(Abstract Factory) 定义 抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 类图 描述 多个抽象产品 ...
- winscp上传出现时间戳提示错误
文件ngx_http_access_module.c上传成功,但是在设置权限和/或时间戳时发生错误.具体内容上图: 我们可以选择 ‘中止’,文件是可以上传成功的,就是每次都会提示这个信 ...
- [Jsoi2011]柠檬
Description Flute 很喜欢柠檬.它准备了一串用树枝串起来的贝壳,打算用一种魔法把贝壳变成柠檬.贝壳一共有 N (1 ≤ N ≤ 100,000) 只,按顺序串在树枝上.为了方便,我们从 ...