• flask 第三方组件


    1 flask-session

    安装

    pip3 install flask-session 

    使用

    # 1 导入
    from flask import Flask,session
    import redis
    from flask_session import Session
    
    # 2 配置
    app.config['SESSION_TYPE'] = 'redis'
    app.config['SESSION_REDIS'] = redis.Redis(host='140.143.227.206',port=6379,password='1234')
    Session(app)
    
    # 3 视图函数里使用
    session['user'] = 'alex'

    原理

    1 session数据保存到redis中
        随机字符串1: {'name': 'alex', 'age': 23}
        随机字符串2: {'name': 'sdf', 'age': 23}
        
    2 随机字符串返回给用户

    2 DBUtils数据库连接池

    使用了local.threading

    安装

    pip3 install DBUtils

    两种连接模式

    1 为每一个线程创建连接, 线程即使调用了close也不会关闭, 只是把连接重新放到连接池, 供【自己线程】使用. 当线程终止时, 连接自动关闭.

    from DBUtils.PooledDB import PersistentDB, 
    POOL = PersistentDB(...)    # 1 建立连接池
    conn = POOL.connection(shareable=False)        # 2 去连接池获取一个连接

    2 创建一批连接大连接池, 供【所有线程】使用 【推荐】

    from DBUtils.PooledDB import PooledDB    
    POOL = PooledDB(...)    # 1 建连接池
    conn = POOL.connection()    # 2 去连接池获取一个连接

    3 wtforms

    https://www.cnblogs.com/wupeiqi/articles/8202357.html

    作用:

    - 生成HTML标签
    - form表单验证

    安装:

    pip3 install wtforms 

    使用:

    - 用户登录
    - 用户注册
    - 从数据库获取数据

    钩子函数

    class LoginForm(Form):
        name = simple.StringField(
            validators=[
                validators.DataRequired(message='用户名不能为空.'),
            ],
            widget=widgets.TextInput(),
            render_kw={'placeholder':'请输入用户名'}
        )
        pwd = simple.PasswordField(
            validators=[
                validators.DataRequired(message='密码不能为空.'),
    
            ],
            render_kw={'placeholder':'请输入密码'}
        )
    
        def validate_name(self, field):
            """
            自定义name字段规则
            :param field:
            :return:
            """
            # 最开始初始化时,self.data中已经有所有的值
            print('钩子函数获取的值',field.data)
            if not field.data.startswith('old'):
                raise validators.ValidationError("用户名必须以old开头")     # 继续后续验证
                # raise validators.StopValidation("用户名必须以old开头")    # 停止后续验证
    View Code

    4 flask_sqlalchemy

    安装

    pip3 install flask-sqlalchemy

    使用

    第一步: 导入并实例化SQLAlchemy
        # chun.__init__.py 
        
        from flask_sqlalchemy import SQLAlchemy
        db = SQLAlchemy()
        
        注意事项:
             - 必须在导入蓝图之前
             - 必须导入models.py 
             
    第二步: 初始化
        db.init_app(app)
    
    第三步:在配置文件中写入配置
        # ##### SQLALchemy配置文件 #####
        SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123456@127.0.0.1:3306/s9day122?charset=utf8"
        SQLALCHEMY_POOL_SIZE = 10
        SQLALCHEMY_MAX_OVERFLOW = 5
    
    第四步: 创建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)
    
    第五步:生成表(使用app上下文)
        # 离线脚本
        from chun import db,create_app
    
        app = create_app()
        app_ctx = app.app_context() # app_ctx = app/g
        with app_ctx: # __enter__,通过LocalStack将app_ctx放入Local中
            db.create_all() # 调用LocalStack去Local中获取app_ctx(app,g),再去app中获取配置
    
        
    第六步:基于ORM对数据库进行操作。
        from flask import Blueprint
        from chun import db
        from chun import models
        us = Blueprint('us',__name__)
    
    
        @us.route('/index')
        def index():
            # 1 使用SQLAlchemy在数据库中插入一条数据
            # db.session.add(models.Users(name='高件套',depart_id=1))
            # db.session.commit()
            # db.session.remove()
            # 2 查询
            result = db.session.query(models.Users).all()
            print(result)
            db.session.remove()
    
            return 'Index'

    5 flask-script

    安装

    pip3 install flask-script

    使用

    1 配置
        from flask_script import Manager
        
        manager = Manager(app)
        manager.run()                # 代替了app.run()
        
    2 使用命令:
        1 runserver
            python manage.py runserver -h '127.0.0.1' -p 5000
            
        2 自定义命令: 位置传参
            @manager.command
            def custom(arg):
                """
                自定义命令
                python manage.py custom 123
                :param arg:
                :return:
                """
                print(arg)
        
        3 自定义命令: 关键字传参
            @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)

    6 flask-migrate

    # 帮助我们做数据库迁移    # 依赖:flask-script 

    安装

    pip3 install flask-migrate

    配置

    from flask_script import Manager
    from flask_migrate import Migrate, MigrateCommand        
    
    app = create_app()
    manager = Manager(app)    # flask_script
    
    Migrate(app, db)        # db = SQLAlchemy()
    manager.add_command('db', MigrateCommand)

    使用

    python manage.py db init
    python manage.py db migrate        # makemigrations
    python manage.py db upgrade        # migrate

    7 pipreqs

    # 自动帮到项目使用的所有组件和版本

    安装

    pip3 install pipreqs

    使用

    # 项目根目录下使用命令:
    pipreqs ./ --encoding=utf-8

    扩展

    一键安装依赖

    pip3 install -r requirements.txt

    8 虚拟环境

    安装             pip3 install virtualenv
    创建虚拟环境    virtualenv env1 --no-site-packages        (默认就是: --no-site-packages)
    进入虚拟环境    activate
    退出虚拟环境    deactivate
  • 相关阅读:
    索引器
    拆箱,装箱,枚举,结构
    题解报告(CDUT暑期集训——第二场)
    题解报告(CDUT暑期集训——第一场)
    第十一届四川省程序设计竞赛赛后感(电科两日游
    ZOJ4108 Fibonacci in the Pocket
    ZOJ4107 Singing Everywhere
    ZOJ4106 Lucky 7 in the Pocket
    ZOJ4105 Abbreviation
    ZOJ4104 Sequence in the Pocket
  • 原文地址:https://www.cnblogs.com/sunch/p/10664520.html
Copyright © 2020-2023  润新知