1.首先一个Flask的Web项目的创建需求一(文章概述):一:必须实现命令工具管理App,用于在命令行输入命令对项目进行管理,对后期多多益善
二:必须实现“蓝图”管理,用于将app启动函数与路由分开管理,使得项目启动文件、API路由管理更加更加清晰
三:必须实现类与数据库之间的映射,方便的实现App中的类与数据库中的表一一映射,更加简易的实现对数据库的增、删、改、查操作
2.现在来创建一个Flask项目项目默认创建
项目默认目录结构
3.实现命令工具管理App,首先需要自定义一个创建App的方法,然后安装flask-script插件,使用插件的Manager()构建对象,具体如下:为了方便直接先安装插件flask-script,先后无影响:pip install flask-script安装命令管理工具的插件
2.第一次修改默认目录。一:删除默认app启动部分代码。二:创建apps包,在init中创建项目创建的方法。三:导入自己需要的开发配置文件。四:将app交给命令工具管理插件
一.第一步
#配置文件
class Config:
# 后端代码变项目自动重新启动
ENV='development'
DEBUG=True
#mysql+pymysql://user:password@hostid:port/databasename,数据库配置
SQLALCHEMY_DATABASE_URI='mysql+pymysql://yh:123@localhost:3306/flaskday06_1'
SQLALCHEMY_TRACK_MODIFICATIONS=False
#其它。。。
二,三:第二步
from flask import Flask
import settings
def create_app():
#使用flask创建app对象,并且修改默认的静态文件与模板寻找的路径
app=Flask(__name__,template_folder='../templates',static_folder='../static')
#导入自己需要的配置文件
app.config.from_object(settings.Config)
#为App挂载蓝图
#为App挂载与数据库操作的插件
#打印路由
print(app.url_map)
return app
四:
from flask_script import Manager
from apps import create_app
app=create_app() #调用创建App的自定义方法
manager=Manager(app=app) #将app项目交给命令管理工具,方便管理数据库映射命令(其中之一)
if __name__ == '__main__':
#app.run()
manager.run()
四:命令管理工具基本使用
使用命令在终端:python app.py runserver -----项目启动
runserver -h 0.0.0.0 -p 5001 ----指定IP与PORT使用命令管理工具启动项目,之后使用会更加方便
自定义添加命令:
@manager.command #命令装饰器
def hello():
print('hello 方法')
命令使用:python app.py hello
五:使用"蓝图"管理API路由一:创建"蓝图",Blueprint()管理对应类的API构建蓝图,‘user’可以方便用于url_for()相结合
#用于存放视图函数
from flask import Blueprint
user_bp=Blueprint('user',__name__)
'''
使用蓝图管理路由,更加方便与代码清晰
'''
@user_bp.route('/')
def index():
return '首页'
@user_bp.route('/register',methods=['GET','POST'])
def register():
return '用户注册'
@user_bp.route('/show')
def show():
return '用户信息展示'
二:在创建app的方法(create_app())中挂载蓝图,使用app.register_blueprint()方法挂载蓝图
from flask import Flask
import settings
from apps.users.view import user_bp
def create_app():
#使用flask创建app对象,并且修改默认的静态文件与模板寻找的路径
app=Flask(__name__,template_folder='../templates',static_folder='../static')
#导入自己需要的配置文件
app.config.from_object(settings.Config)
#为App挂载蓝图
app.register_blueprint(user_bp)
#为App挂载与数据库操作的插件
#打印路由
print(app.url_map)
return app
四:测试蓝图是否能找到相应的API蓝图测试、命令插件测试、自定义配置文件测试
蓝图成功配置的证据
六:与数据库交互。一:安装与数据库建立关系的道路插件。二:安装与数据库映射的插件。三:安装与数据库操作命令的插件。四:串起来更加方便的使用(非常棒)便于理解:与数据库交互有以下操作
增加:insert into
删除:delete from
修改:update....set
查询:select...from
.........
这些插件与App、数据库之间的关系,或者说是插件的作用:
数据放入数据库,数据持久化
flask app数据库
| pymysql(插件,用于建立关系)
| 与数据映射需要flask_sqlalchemy插件,大概操作:
| 将SQLALchemy()关联到Flask App中
| db=SQLALchemy()
| db.init_app(app)
|
ORM.映射:
类 表
属性:id,name 字段:id,name
对象 一条数据
2.现在开始安装插件:
1.pip install pymysql 驱动,先将公路联系建立起来
2.pip install flask_sqlalchemy 完成数据库映射
3.pip install flask-migrate 用于发布命令的插件pip install pymysql 的安装
pip install flask_sqlalchemy 安装
flask_sqlalchemy 安装成功
安装命令工具migrate(不是命令管理工具,管理的是flask-script工具)
数据库命令工具安装成功
3.SQLAlchemy: ORM.映射关系
flask-sqlalchemy:基于SQLAlchemy,做了提升.使程序员在开发的时候更加方便.
4.环境配置步骤:配置数据库的路径
#mysql+pymysql://user:password@hostid:port/databasename
SQLALCHEMY_DATABASE_URI='mysql+pymysql://yh:123@127.0.0.1:3306/taskday5'
#配置文件
class Config:
# 后端代码变项目自动重新启动
ENV='development'
DEBUG=True
#mysql+pymysql://user:password@hostid:port/databasename,数据库配置
SQLALCHEMY_DATABASE_URI='mysql+pymysql://yh:123@localhost:3306/taskday05_5'
SQLALCHEMY_TRACK_MODIFICATIONS=False
#其它。。。
2.创建包extends
在 __init__.py 中添加:
db=SQLAlchemy() ------------->之后必须挂载到app中,也就是create_app()方法中
#sqlalchemy插件的调用,用于映射类与数据库中的表的
from flask_sqlalchemy import SQLAlchemy
db=SQLAlchemy()
在create_app()方法中挂载,也就是使得当前App可用使用该插件
def create_app():
....
db.init_app(app)
...
return app
from flask import Flask
import settings
from extends import db
from apps.users.view import user_bp
def create_app():
#使用flask创建app对象,并且修改默认的静态文件与模板寻找的路径
app=Flask(__name__,template_folder='../templates',static_folder='../static')
#导入自己需要的配置文件
app.config.from_object(settings.Config)
#为App挂载蓝图
app.register_blueprint(user_bp)
#为App挂载与数据库操作的插件
db.init_app(app=app)
#打印路由
print(app.url_map)
return app
3.将migrate命令工具交给命令管理工具flask-script,更加方便使用
migrate:命令工具,需要与Manager(flask-script插件)关联起来,把命令交给Manager管理,操作命令影响数据库的映射
from flask_migrate import Migrate, MigrateCommand
from flask_script import Manager
from apps import create_app
from extends import db
app=create_app() #调用创建App的自定义方法
manager=Manager(app=app) #将app项目交给命令管理工具,方便管理数据库映射命令(其中之一)
#将migrate命令工具交给命令管理工具flask-script
migrate=Migrate(app=app,db=db) #指定命令管理工具影响的app,需要数据库命令
manager.add_command('db',MigrateCommand) #将命令工具的命令交给命令管理工具,然后使用“db”作为标识
if __name__ == '__main__':
#app.run()
manager.run()
4.创建模型,完成类与数据库的一一映射:
models.py
模型就是类
class User如下
class User(db.Model):
#db.Column(类型) 映射表中的列
id=db.Column(db.Integer,primary_key=True,autoincrement=True)
username=db.Column(db.String(15),nullable=False)
password=db.Column(db.String(15),nullable=False)
phone=db.Column(db.String(11),unique=True)
rdatetime=db.Column(db.DateTime,default=datetime.now)创建需要与数据库映射的类
#用于创建User类
from datetime import datetime
from extends import db
'''
使用一些命令之后,该类与数据库中的表会实现一一映射
'''
class User(db.Model):
# db.Column(类型) 映射表中的列
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
username = db.Column(db.String(15), nullable=False)
password = db.Column(db.String(15), nullable=False)
phone = db.Column(db.String(11), unique=True)
rdatetime = db.Column(db.DateTime, default=datetime.now)
5.使用命令:
a.敲黑板........
在app.py中导入模型:from apps.user.model import User *一定需要*在apps中导入需要映射的类一定要
数据库配置一定也要正确
b.在终端中使用命令:db
命令1:python app.py db init ----------->产生一个文件夹migrations,该命令只需要成功执行一次即可命令执行与效果显示
命令2:python app.py db migrate----->产生一个版本文件执行命令之后会生成一个版本文件
命令3:python app.py db upgrade---->完成映射使用命令完成映射的命令与验证是否成功
命令4:python app.py db downgrade-->完成映射,根据当前本版降级到上一个版本的样子
c.项目完成之后的基本目录结构:目录结构
|--apps
|--extends
|--migrations
|---versions 版本文件夹
|--6bffd38e9879_.py------>产生依赖于python app.py db migrate 的执行
|--56e4105b18ec_.py------>产生依赖于python app.py db migrate 的执行
现在移植成功之后,将它升级(与数据库映射)即可:
|--与数据库同步------>产生依赖于python app.py db upgrate命令的执行,完 成升级,完成映射。
|--与前一个数据库同步------>产生依赖于python app.py db downgrate命令的执行,完成降级,降级到当前版本的前一个版本,同时完成映射
flask之web开发最基本的,而且方便适用的东西,前边可能会麻烦一点,但是之后用起来会很爽