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:[email protected]: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

猜你喜欢

转载自www.cnblogs.com/sunch/p/10664520.html