最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

Flask.2

IT圈 admin 1浏览 0评论

Flask.2

Flask 拆分文件

FlaskWork 为工程文件

  • __init__.py :
from flask import Flaskfrom App.extension import init_ext
from App.settings import envs
from App.views import init_bluedef create_app(env):# 创建Flask对象app = Flask(__name__)# 加载配置  初始化配置
    app.config.from_object(envs.get(env))# 初始化扩展库,加载扩展库
    init_ext(app)# 初始化路由 加载路由
    init_blue(app)return app

 

  • extension.py(扩展库)
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()
migrate = Migrate()def init_ext(app):db.init_app(app)migrate.init_app(app, db)
  • settings.py(一般配置四套环境:开发环境、测试环境、演示环境、生产环境)
def get_db_uri(dbinfo):database = dbinfo.get("DATABASE")driver = dbinfo.get("DRIVER")user = dbinfo.get("USER")password = dbinfo.get("PASSWORD")host = dbinfo.get("HOST")port = dbinfo.get("PORT")name = dbinfo.get("NAME")return "{}+{}://{}:{}@{}:{}/{}".format(database,driver,user,password,host,port,name)class Config:DEBUG = FalseTESTING = FalseSECRET_KEY = "zbczbc"SQLALCHEMY_TRACK_MODIFICATIONS = Falseclass DevelopConfig(Config):DEBUG = Truedbinfo = {"DATABASE":"mysql","DRIVER":"pymysql","USER":"root","PASSWORD":"your password","HOST":"127.0.0.1","PORT":"3306","NAME":"FlaskWork"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)class TestingConfig(Config):TESTING = Truedbinfo = {"DATABASE":"mysql","DRIVER":"pymysql","USER":"root","PASSWORD":"your password","HOST":"127.0.0.1","PORT":"3306","NAME":"FlaskWork"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)class StagingConfig(Config):dbinfo = {"DATABASE": "mysql","DRIVER": "pymysql","USER": "root","PASSWORD": "your password","HOST": "127.0.0.1","PORT": "3306","NAME": "FlaskWork"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)class ProductConfig(Config):dbinfo = {"DATABASE": "mysql","DRIVER": "pymysql","USER": "root","PASSWORD": "your password","HOST": "127.0.0.1","PORT": "3306","NAME": "FlaskWork"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)envs = {"develop": DevelopConfig,"testing": TestingConfig,"staging": StagingConfig,"product": ProductConfig,"default": ProductConfig
}
  • views.py(视图函数(FlaskWork))
from Movies.views import movies_blue
from Users.views import users_bluedef init_blue(app):app.register_blueprint(blueprint=users_blue)app.register_blueprint(blueprint=movies_blue)

Users

  • models.py
from FlaskWork.extension import db
from common.models import BaseModelclass User(BaseModel):name = db.Column(db.String(32), unique=True)password = db.Column(db.String(256))email = db.Column(db.String(128), unique=True)icon = db.Column(db.String(256), nullable=True)def check_password(self,password):return self.password == password
  • views.py(简单的实现用户注册)
#蓝图
users_blue = Blueprint("users_blue",__name__,url_prefix="/users")@users_blue.route('/register/',methods=["GET","POST"])
def register():if request.method == "GET":return render_template('register.html')elif request.method == "POST":username = request.form.get("username")password = request.form.get("password")password1 = request.form.get("conpassword")email = request.form.get("email")icon = request.files.get("icon")users = User.query.filter(User.name.__eq__(username)).all()if users:return "该用户已存在"if password != password1:return "两次密码输入不一致"path = Noneif icon:try:ext = "." + icon.filename.split(".")[-1]except Exception as e:ext = ".jpg"path = "/static/icons/" + username + extsave_path = "/Users/elema/Desktop/python1903/Day04/FlaskHomework/static/icons/" + username + exticon.save(save_path)user = User(name=username, password=password, email=email, icon=path)if user.save():return redirect(url_for('users_blue.login'))else:return "注册失败"

manage.py(管理者)

import osfrom flask_migrate import MigrateCommand
from flask_script import Managerfrom FlaskWork import create_appenv = os.environ.get("FLASK_ENV") or "default"app = create_app(env)manager = Manager(app)
manager.add_command("db", MigrateCommand)if __name__ == "__main__":manager.run()

migrations(为迁移文件,可以和数据库进行映射)

 

扩展库

  • 迁移
    • 可以自动将模型变成数据库中的表
  • 实现
    • flask-migrate
  • 使用过程
    • 安装  
      • pip install flask-migrate  
    • 配置
      • 绑定app和db
      • 创建一个Migrate对象,传递app和db进去
    • 具体使用
      • 首次使用需要初始化
        • python manage.py db init
      • 如果模型有变更,生成迁移文件
        • python manage.py db migrate 
      • 将迁移文件映射到数据库中
        • python manage.py db upgrade(升级)
        • 后悔药
        • python manage.py db downgrade(降级) 

 

转载于:.html

Flask.2

Flask 拆分文件

FlaskWork 为工程文件

  • __init__.py :
from flask import Flaskfrom App.extension import init_ext
from App.settings import envs
from App.views import init_bluedef create_app(env):# 创建Flask对象app = Flask(__name__)# 加载配置  初始化配置
    app.config.from_object(envs.get(env))# 初始化扩展库,加载扩展库
    init_ext(app)# 初始化路由 加载路由
    init_blue(app)return app

 

  • extension.py(扩展库)
from flask_migrate import Migrate
from flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()
migrate = Migrate()def init_ext(app):db.init_app(app)migrate.init_app(app, db)
  • settings.py(一般配置四套环境:开发环境、测试环境、演示环境、生产环境)
def get_db_uri(dbinfo):database = dbinfo.get("DATABASE")driver = dbinfo.get("DRIVER")user = dbinfo.get("USER")password = dbinfo.get("PASSWORD")host = dbinfo.get("HOST")port = dbinfo.get("PORT")name = dbinfo.get("NAME")return "{}+{}://{}:{}@{}:{}/{}".format(database,driver,user,password,host,port,name)class Config:DEBUG = FalseTESTING = FalseSECRET_KEY = "zbczbc"SQLALCHEMY_TRACK_MODIFICATIONS = Falseclass DevelopConfig(Config):DEBUG = Truedbinfo = {"DATABASE":"mysql","DRIVER":"pymysql","USER":"root","PASSWORD":"your password","HOST":"127.0.0.1","PORT":"3306","NAME":"FlaskWork"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)class TestingConfig(Config):TESTING = Truedbinfo = {"DATABASE":"mysql","DRIVER":"pymysql","USER":"root","PASSWORD":"your password","HOST":"127.0.0.1","PORT":"3306","NAME":"FlaskWork"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)class StagingConfig(Config):dbinfo = {"DATABASE": "mysql","DRIVER": "pymysql","USER": "root","PASSWORD": "your password","HOST": "127.0.0.1","PORT": "3306","NAME": "FlaskWork"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)class ProductConfig(Config):dbinfo = {"DATABASE": "mysql","DRIVER": "pymysql","USER": "root","PASSWORD": "your password","HOST": "127.0.0.1","PORT": "3306","NAME": "FlaskWork"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)envs = {"develop": DevelopConfig,"testing": TestingConfig,"staging": StagingConfig,"product": ProductConfig,"default": ProductConfig
}
  • views.py(视图函数(FlaskWork))
from Movies.views import movies_blue
from Users.views import users_bluedef init_blue(app):app.register_blueprint(blueprint=users_blue)app.register_blueprint(blueprint=movies_blue)

Users

  • models.py
from FlaskWork.extension import db
from common.models import BaseModelclass User(BaseModel):name = db.Column(db.String(32), unique=True)password = db.Column(db.String(256))email = db.Column(db.String(128), unique=True)icon = db.Column(db.String(256), nullable=True)def check_password(self,password):return self.password == password
  • views.py(简单的实现用户注册)
#蓝图
users_blue = Blueprint("users_blue",__name__,url_prefix="/users")@users_blue.route('/register/',methods=["GET","POST"])
def register():if request.method == "GET":return render_template('register.html')elif request.method == "POST":username = request.form.get("username")password = request.form.get("password")password1 = request.form.get("conpassword")email = request.form.get("email")icon = request.files.get("icon")users = User.query.filter(User.name.__eq__(username)).all()if users:return "该用户已存在"if password != password1:return "两次密码输入不一致"path = Noneif icon:try:ext = "." + icon.filename.split(".")[-1]except Exception as e:ext = ".jpg"path = "/static/icons/" + username + extsave_path = "/Users/elema/Desktop/python1903/Day04/FlaskHomework/static/icons/" + username + exticon.save(save_path)user = User(name=username, password=password, email=email, icon=path)if user.save():return redirect(url_for('users_blue.login'))else:return "注册失败"

manage.py(管理者)

import osfrom flask_migrate import MigrateCommand
from flask_script import Managerfrom FlaskWork import create_appenv = os.environ.get("FLASK_ENV") or "default"app = create_app(env)manager = Manager(app)
manager.add_command("db", MigrateCommand)if __name__ == "__main__":manager.run()

migrations(为迁移文件,可以和数据库进行映射)

 

扩展库

  • 迁移
    • 可以自动将模型变成数据库中的表
  • 实现
    • flask-migrate
  • 使用过程
    • 安装  
      • pip install flask-migrate  
    • 配置
      • 绑定app和db
      • 创建一个Migrate对象,传递app和db进去
    • 具体使用
      • 首次使用需要初始化
        • python manage.py db init
      • 如果模型有变更,生成迁移文件
        • python manage.py db migrate 
      • 将迁移文件映射到数据库中
        • python manage.py db upgrade(升级)
        • 后悔药
        • python manage.py db downgrade(降级) 

 

转载于:.html

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论