zoukankan      html  css  js  c++  java
  • Flask相关组件及应用

    一、flask-sqlalchemy

    a. 下载安装
        pip3 install flask-sqlalchemy
    b. chun.__init__.py 
        导入并实例化SQLAlchemy
        from flask_sqlalchemy import SQLAlchemy
        db = SQLAlchemy()
        
        注意事项:
             - 必须在导入蓝图之前
             - 必须导入models.py 
    c. 初始化
        db.init_app(app)
        
    d. 在配置文件中写入配置
        # ##### SQLALchemy配置文件 #####
        SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123456@127.0.0.1:3306/s9day122?charset=utf8"
        SQLALCHEMY_POOL_SIZE = 10
        SQLALCHEMY_MAX_OVERFLOW = 5
    
    e. 创建models.py中的类(对应数据库表)
        chun/models.py 
            from sqlalchemy.ext.declarative import declarative_base
            from sqlalchemy import Column
            from sqlalchemy import Integer,String,Text,Date,DateTime
            from sqlalchemy import create_engine
            from chun import db
    
    
            class Users(db.Model):
                __tablename__ = 'users'
    
                id = Column(Integer, primary_key=True)
                name = Column(String(32), index=True, nullable=False)
                depart_id = Column(Integer)
    
    f. 生成表(使用app上下文)
        from chun import db,create_app
    
        app = create_app()
        app_ctx = app.app_context() # app_ctx = app/g
        with app_ctx: # __enter__,通过LocalStack放入Local中
            db.create_all() # 调用LocalStack放入Local中获取app,再去app中获取配置
    
            
    g. 基于ORM对数据库进行操作。
        from flask import Blueprint
        from chun import db
        from chun import models
        us = Blueprint('us',__name__)
    
    
        @us.route('/index')
        def index():
            # 使用SQLAlchemy在数据库中插入一条数据
            # db.session.add(models.Users(name='高件套',depart_id=1))
            # db.session.commit()
            # db.session.remove()
            result = db.session.query(models.Users).all()
            print(result)
            db.session.remove()
    
            return 'Index'

    二、flask-script

    安装:
    pip3 install flask-script 
    
    功能:
        a. 增加 runserver
            from chun import create_app
            from flask_script import Manager
    
    
            app = create_app()
            manager = Manager(app)
    
            if __name__ == '__main__':
                # app.run()
                manager.run()
                
        b. 位置传参
            from chun import create_app
            from flask_script import Manager
    
    
            app = create_app()
            manager = Manager(app)
    
            @manager.command
            def custom(arg):
                """
                自定义命令
                python manage.py custom 123
                :param arg:
                :return:
                """
                print(arg)
    
    
            if __name__ == '__main__':
                # app.run()
                manager.run()
        c. 关键字传参
            from chun import create_app
            from flask_script import Manager
    
    
            app = create_app()
            manager = Manager(app)
    
            @manager.option('-n', '--name', dest='name')
            @manager.option('-u', '--url', dest='url')
            def cmd(name, url):
                """
                自定义命令
                执行: python manage.py  cmd -n wupeiqi -u http://www.oldboyedu.com
                :param name:
                :param url:
                :return:
                """
                print(name, url)
    
    
            if __name__ == '__main__':
                # app.run()
                manager.run()

    三、flask-migrate

    安装:
    pip3 install flask-migrate 
    依赖:flask-script 
    
        #!/usr/bin/env python
        # -*- coding:utf-8 -*-
    
        from sansa import create_app
        from sansa import db
    
        from flask_script import Manager
        from flask_migrate import Migrate, MigrateCommand
    
        app = create_app()
        manager = Manager(app)
        Migrate(app, db)
    
        """
        # 数据库迁移命名
            python manage.py db init
            python manage.py db migrate
            python manage.py db upgrade
        """
        manager.add_command('db', MigrateCommand)
    
    
        if __name__ == '__main__':
            manager.run()
            # app.run()

    四、找到项目使用的所有组件和版本

    安装:
    pip install pipreqs
    
    pipreqs ./ --encoding=utf-8  
    #在终端中输入这条命令后会产生一个requirements.txt文件,里面包含项目中所需要的全部组件和版本

    五、虚拟环境

    安装:
    pip3 install virtualenv
    
    
    virtualenv env1  --no-site-packages
    #上面命令会初始化一个干净的新的环境,
    
    env1 #进入env1目录
    activate  #激活,进入新创建的环境
    deactivate

    综合应用示例

     models.py

    from sqlalchemy import Column
    from sqlalchemy import Integer,String
    from chun import db
    
    
    class Users(db.Model):
        __tablename__ = 'users'
    
        id = Column(Integer, primary_key=True)
        name = Column(String(32), index=True, nullable=False)
        depart_id = Column(Integer)

    user.py

    from flask import Blueprint
    ac = Blueprint('ac',__name__)
    
    
    @ac.route('/login')
    def login():
        return 'Login'

    account.py

    from flask import Blueprint
    from chun import db
    from chun import models
    us = Blueprint('us',__name__)
    
    
    @us.route('/index')
    def index():
        # 使用SQLAlchemy在数据库中插入一条数据
        # db.session.add(models.Users(name='高件套',depart_id=1)) #调用db.session的时候,内部为每个线程去数据库连接池中获取一个连接
        # db.session.commit()
        # db.session.remove()
        result = db.session.query(models.Users).all()
        print(result)  #[<Users 1>, <Users 2>]
        db.session.remove()
    
        return 'Index'

    __init__.py

    from flask import Flask
    from flask_session import Session
    
    # 第一步:导入并实例化SQLAlchemy
    from flask_sqlalchemy import SQLAlchemy
    db = SQLAlchemy() #创建了SQLAlchemy要用到的所有的东西,但缺少数据库的连接
    #db相当于全部变量必须在导入蓝图的砂上面
    #因为蓝图要操作数据必须得先导入db
    
    from .views.account import ac
    from .views.user import us
    
    from .models import *
    #必须要导入model,不然找不到模块就生成不了表
    
    def create_app():
        app = Flask(__name__)
        app.config.from_object('settings.ProConfig')
    
        app.register_blueprint(ac)
        app.register_blueprint(us)
    
        # Flask-Session: 第一步实例化Session
        # Session(app)
    
        # 第三步:依赖app中的配置文件
        db.init_app(app) #去app里面读配置文件
    
        return app

    settings.py

    from redis import Redis
    
    class BaseConfig(object):
        # Flask-Session: 第二步设置相应的配置
        # SESSION_TYPE = 'redis'
        # SESSION_REDIS = Redis(host='192.168.0.94', port='6379')
    
        # ##### SQLALchemy配置文件 #####
        SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:2180736@127.0.0.1:3306/s9day122?charset=utf8"
        SQLALCHEMY_POOL_SIZE = 10
        SQLALCHEMY_MAX_OVERFLOW = 5
    
        SQLALCHEMY_TRACK_MODIFICATIONS = False
    
        pass
    
    
    class ProConfig(BaseConfig):
        pass

    create_table.py

    from chun import db,create_app
    
    app = create_app()
    app_ctx = app.app_context() # app_ctx = app/g
    with app_ctx: # 执行app_ctx里面的__enter__方法,通过LocalStack放入Local中
        db.create_all() # 调用LocalStack去Local中获取app,再去app中获取配置

    manage.py

    from flask_script import Manager
    from flask_migrate import Migrate, MigrateCommand
    from chun import create_app
    from chun import db
    
    app = create_app()
    manager = Manager(app)
    Migrate(app, db)
    """
    # 数据库迁移命名
        python manage.py db init
        python manage.py db migrate # makemirations
        python manage.py db upgrade # migrate
    """
    manager.add_command('db', MigrateCommand)
    
    @manager.command
    def custom(arg):
        """
        自定义命令
        python manage.py custom 123
        :param arg:
        :return:
        """
        print(arg)
    
    @manager.option('-n', '--name', dest='name')
    @manager.option('-u', '--url', dest='url')
    def cmd(name, url):
        """
        自定义命令
        执行: python manage.py  cmd -n wupeiqi -u http://www.oldboyedu.com
        :param name:
        :param url:
        :return:
        """
        print(name, url)
    
    
    if __name__ == '__main__':
        # app.run()
        manager.run()
  • 相关阅读:
    初识Python(3)__Python 数字
    初识Python(2)__Python 对象
    正式开始学习python
    现代浏览器的工作原理
    data URI scheme
    连接池
    介绍缓存的基本概念和常用的缓存技术(转)
    前后端及常用语言介绍
    非关系型数据库和关系型数据库区别
    VC编译连接选项详解(转)
  • 原文地址:https://www.cnblogs.com/zh-xiaoyuan/p/13275594.html
Copyright © 2011-2022 走看看