1.使用命令在终端: python app.py runserver ----->Runs the Flask development server python app.py runserver -h 0.0.0.0 -p 5001 自定义添加命令: @manager.command def init(): print('初始化') python app.py init 2.数据库: mtv: model 模型 --》数据库 template 模板 view 视图 安装: pip install pymysql 建工路 pip install flask-sqlalchemy 实现ORM映射 pip install flask-migrate 发布命令的工具 步骤: 1.配置数据库的连接路径 #mysql+pymysql://user:password@hostip:port/databasename SQLALCHEMY_DATABASE_URI='mysql+pymysql://root:root@127.0.0.1:3306/flaskday05' 2.创建exts __init__.py中添加: db=SQLAlchemy() --->必须跟app联系 def create_app(): ... db.init_app(app) return app 3.migrate: migrate=Migrate(app=app,db=db) manager.add_command('db',MigrateCommand) 4.创建模型: models.py 模型就是类 class User(db.Model): ---->user表 id=db.Column(db.Integer,primary_key=True,autoincrement=True) username=db.Column(db.String(15),nullable=False) password=db.Column(db.String(12),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.models import User b.在终端使用命令:db python app.py db init ---》产生一个文件夹migrations python app.py db migrate --》自动产生了一个版本文件 项目 |---apps |---exts |---migrations python app.py db init 一个项目只需要init一次 |--versions 版本文件夹 |---c5f027995aa5_.py ---> python app.py db migrate 迁移 |---5fddbc4f8c48_.py python app.py db upgrade 同步 python app.py db downgrade 降级 ?serverTimezone=GMT
在models.py文件中
# ORM 类 --》表 # 类对象 --》表中的一条记录 from exts import db from datetime import datetime # create table user(id int primarykey auto_increment,username varchar(20) not null,...) class User(db.Model): # db.Column(类型,约束) 映射表中的列 ''' 类型: db.Integer int db.String(15) varchar(15) db.Datetime datetime ''' id=db.Column(db.Integer,primary_key=True,autoincrement=True) username=db.Column(db.String(15),nullable=False) password=db.Column(db.String(12),nullable=False) phone=db.Column(db.String(11),unique=True) rdatetime=db.Column(db.DateTime,default=datetime.now) def __str__(self): return self.username
在view.py文件中
from flask import Blueprint,request,render_template from apps.user.models import User from exts import db user_bp=Blueprint('user',__name__) @user_bp.route('/register',methods=['POST','GET']) def register(): if request.method=='POST': username=request.form.get('username') password=request.form.get('password') repassword=request.form.get('repassword') phone=request.form.get('phone') if password==repassword: # 与模型结合 # 1.找到模型类并创建对象 user=User() # 2.给对象的属性赋值 user.username=username user.password=password user.phone=phone # 添加 #3.将user对象添加到session中(类似缓存) db.session.add(user) # 4.提交数据 db.session.commit() return '用户注册成功' else: return'两次密码不一致' return render_template('user/register.html')
在apps.py文件夹__init__.py文件中
from flask import Flask import settings from exts import db from apps.user.view import user_bp def create_app(): app=Flask(__name__,template_folder='../templates',static_folder='../static') app.config.from_object(settings.DevelopmentConfig) # 注册蓝图 app.register_blueprint(user_bp) # 蓝图与app进行关联 # 初始化配置db db.init_app(app) # 将db对象与app进行关联 return app
在exts文件夹中的__init__.py文件中
from flask_sqlalchemy import SQLAlchemy db=SQLAlchemy()
在register.html文件中
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>用户注册</title> </head> <body> <h1>用户注册</h1> <form action="{{ url_for('user.register') }}" method="post"> <p><input type="text" name="username" placeholder="用户名"></p> <p><input type="password" name="password" placeholder="密码"></p> <p><input type="password" name="repassword" placeholder="确认密码"></p> <p><input type="text" name="phone" placeholder="手机号码"></p> <p><input type="submit" value="用户注册"></p> </form> </body> </html>
在app.py文件中
from flask import Flask from flask_script import Manager from apps import create_app from flask_migrate import Migrate,MigrateCommand from exts import db from apps.user.models import User # 必须导,models中创一个导一个 app=create_app() manager=Manager(app=app) #命令工具 migrate=Migrate(app=app,db=db) manager.add_command('db',MigrateCommand) if __name__ == '__main__': manager.run()
在settings.py文件中
class Config: DEBUG=True # mysql+pymysql://user:password@hostip:port/databasename SQLALCHEMY_DATABASE_URI='mysql+pymysql://root:root@127.0.0.1:3306/flaskday05' SQLALCHEMY_TRACK_MODIFICATIONS=False SQLALCHEMY_ECHO=True class DevelopmentConfig(Config): ENV='development' class ProductionConfig(Config): ENV='development' DDEBUG=False