flask 中的常用组件的使用 ,virtualenv组件和 pipreqs组件

一  。 flask 中连接的数据库的组件 DButils

  

 #!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql
from DBUtils.PooledDB import PooledDB, SharedDBConnection
POOL = PooledDB(
    creator=pymysql,  # 使用链接数据库的模块
    maxconnections=20,  # 连接池允许的最大连接数,0和None表示不限制连接数
    mincached=2,  # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
    maxcached=5,  # 链接池中最多闲置的链接,0和None不限制
    maxshared=0,  # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。
    blocking=True,  # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
    maxusage=None,  # 一个链接最多被重复使用的次数,None表示无限制
    setsession=[],  # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]
    ping=0,
    # ping MySQL服务端,检查是否服务可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed, 7 = always
    host=‘127.0.0.1‘,
    port=3306,
    user=‘root‘,
    password=‘123456‘,
    database=‘day116‘,
    charset=‘utf8‘
)

def func():
    # 去连接池中获取一个连接
    conn = POOL.connection()
    cursor = conn.cursor()
    # cursor.execute(‘select * from users‘)
    print(‘开始去执行了‘)
    cursor.execute(‘select sleep(5)‘)
    result = cursor.fetchall()
    # 将连接返还到连接池中
    conn.close()
    # print(result)

def func2():
    conn = POOL.connection()
    cursor = conn.cursor()
    # cursor.execute(‘select * from users‘)
    print(‘开始去执行了‘,2,3)
    cursor.execute(‘select sleep(5)‘)
    result = cursor.fetchall()
    # 将连接返还到连接池中
    conn.close()
    # print(result)

import threading  # 多线程的模块
for i in range(20):
    t = threading.Thread(target=func)
    t2 = threading.Thread(target=func2)
    t.start()
    t2.start()

二 。 flask 中的 flask-session 组件

  将Flask中的session由原来的默认写到加密cookie中,改成放置到其他数据源,如:redis/memcached/filesystem/mongodb/sqlalchemy(数据库

在 setttings 中设置的代码

    SECRET_KEY = "asdfasdfasdf"
    SESSION_TYPE = ‘redis‘
    SESSION_REDIS = Redis(host=‘127.0.0.1‘,port=6379)

在 app 中的代码

from flask import Flask,session,request,redirect
from flask_session import Session  # 导入这个模块
from .views.account import account
from .views.code import code
from .views.student import student

def auth():
    """
    用户认证
    :return:
    """
    if request.path == ‘/login‘:
        return None
    user_info = session.get(‘user_info‘)
    if user_info:
        return None
    return redirect(‘/login‘)

def create_app():
    app = Flask(__name__)
    app.config.from_object(‘settings.DevelopmentConfig‘)

    app.register_blueprint(account)
    app.register_blueprint(code)
    app.register_blueprint(student)

    app.before_request(auth)
    Session(app)   #  把app对象传进去

    return app

三  flask 中的  wtforms 组件:  

  跟Django中的form组件  一样 都是用于做表单验证

  

from wtforms.fields import simple
from wtforms.fields import html5
from wtforms.fields import core
from wtforms import widgets
from wtforms import validators
from wtforms import Form

from zzy.utils import sqlhelper

class ClsForm(Form):
    title = simple.StringField(
        label=‘名称‘,
        widget=widgets.TextInput(),
        render_kw={‘class‘: ‘form-control‘},
        validators=[
            validators.DataRequired(message=‘班级名称不能为空‘)
        ],
    )

class TestForm(Form):
    name = simple.StringField(
        label=‘用户名‘,
        validators=[
            validators.DataRequired()
        ],
        widget=widgets.TextInput(),
        render_kw={‘class‘: ‘form-control‘}
    )
    """
    pwd = simple.PasswordField(
        label=‘密码‘,
        validators=[
            validators.DataRequired(message=‘密码不能为空.‘)
        ],
        widget=widgets.PasswordInput(),
        render_kw={‘class‘: ‘form-control‘}
    )

    pwd_confirm = simple.PasswordField(
        label=‘重复密码‘,
        validators=[
            validators.DataRequired(message=‘重复密码不能为空.‘),
            validators.EqualTo(‘pwd‘, message="两次密码输入不一致")
        ],
        widget=widgets.PasswordInput(),
        render_kw={‘class‘: ‘form-control‘}
    )

    email = html5.EmailField(
        label=‘邮箱‘,
        validators=[
            validators.DataRequired(message=‘邮箱不能为空.‘),
            validators.Email(message=‘邮箱格式错误‘)
        ],
        widget=widgets.TextInput(input_type=‘email‘),
        render_kw={‘class‘: ‘form-control‘}
    )

    gender = core.RadioField(
        label=‘性别‘,
        choices=(
            (1, ‘男‘),
            (2, ‘女‘),
        ),
        coerce=int
    )
    city = core.SelectField(
        label=‘城市‘,
        choices=(
            (‘bj‘, ‘北京‘),
            (‘sh‘, ‘上海‘),
        )
    )

    hobby = core.SelectMultipleField(
        label=‘爱好‘,
        choices=(
            (1, ‘篮球‘),
            (2, ‘足球‘),
        ),
        coerce=int
    )

    favor = core.SelectMultipleField(
        label=‘喜好‘,
        choices=(
            (1, ‘篮球‘),
            (2, ‘足球‘),
        ),
        widget=widgets.ListWidget(prefix_label=False),
        option_widget=widgets.CheckboxInput(),
        coerce=int
    )
    """
    cls_id = core.SelectField(
        label=‘请选择班级‘,
        # choices=(
        #     (‘bj‘, ‘北京‘),
        #     (‘sh‘, ‘上海‘),
        # )
        choices=[],
        coerce=int
    )

    def __init__(self, *args, **kwargs):
        super(TestForm, self).__init__(*args, **kwargs)

        self.cls_id.choices = sqlhelper.fetchall(sql=‘select id,title from classes‘,args=[],cur=None)

    def validate_name(self,field):
        """
        对name进行验证时的钩子函数
        :param field:
        :return:
        """
        if field != ‘root‘:
            raise validators.ValidationError("用户名必须是root")

不限语言的

四 pipreqs 组件:

  

       安装:
            pip3 install pipreqs 

        使用:
            pipreqs ./ --encoding=utf-8               # 执行完生产一个   requirements.txt 文件 ,里面记录了此项目的所有模块和版本,        pip3 install -r requirements.txt  可以下载文件里的所有模块

不限语言的

五:virtualenv

  创建虚拟的环境

  

    安装:
            pip3 install virtualenv

        命令创建虚拟环境:
            virtualenv 虚拟环境的名称

            cd 虚拟环境目录 

            activate 激活虚拟环境

            pip3 install django==1.7 

            deactivate 退出虚拟环境

原文地址:https://www.cnblogs.com/xuerh/p/9373732.html

时间: 2024-09-27 06:20:16

flask 中的常用组件的使用 ,virtualenv组件和 pipreqs组件的相关文章

Python框架学习之Flask中的常用扩展包

Flask框架是一个扩展性非常强的框架,所以导致它有非常多的扩展包.这些扩展包的功能都很强大.本节主要汇总一些常用的扩展包. 一. Flask-Script pip install flask-script 作用: 1. 可以让我们通过命令行的方式启动服务器,还可以手动指定参数,如ip,port. python hello.py runserver -h 127.0.0.1 -p 6666 2. 结合Flask-Migration扩展包可以实现对数据的迁移 二. Flask-WTF 作用是为了能

Flask中的session ,自定义实现 session机制, 和 flask-session组件

session 是基于cookie实现, 保存在服务端的键值对(形式为 {随机字符串:‘xxxxxx’}), 同时在浏览器中的cookie中也对应一相同的随机字符串,用来再次请求的 时候验证: 注意 :Flask中的session是存在浏览器中 默认key是session(加密的cookie), 也可以像Django一样基于上述的方式实现保存在数据库 1 flask中 session的基本概念 flask 有一个 session 对象.它允许你在不同请求间存储特定用户的信息.它是在 Cookie

在flask中使用celery的实践

前言 在web开发中我们经常会遇到一些耗时的操作,比如发送邮件/短信,执行各种任务等等,这时我们会采取异步的方式去执行这些任务,而celery就是这样的一个异步的分布式任务处理框架,官方文档 今天,我们的主题是celery如何与flask一起工作,我们都知道,flask是一个非常小巧的web框架,有许许多多的扩展,celery也不例外,我们先看下目前常用的几个flask-celery的扩展: Flask-Celery: celery作者本人开发的,其实不算扩展,功能就是安装celery及其相关组

关于jsp商城开发中一些常用框架的介绍

Struts跟Tomcat.Turbine等诸多Apache项目一样,是开源软件,这是它的一大优点,使java商城产品以及jsp商城开发者能更深入的了解其内部实现机制.除此之外,在 java商城开发 中Struts的优点主要集中体现在两个方面:Taglib和页面导航.Taglib是Struts的标记库,比较灵活,能大大提高开发效率.另外,就目前国内的JSP开发者而言,除了使用JSP自带的常用标记外,很少开发自己的标记,或许Struts是一个很好的起点.struts历经6年多的发展,是目前用户数最

iOS中一些 常用的第三方库

转自ibireme的博客 做iOS开发总会接触到一些第三方库,这里整理一下,做一些吐槽. 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code.SourceForge等地方.由于Github社区太过主流,这里主要介绍一下Github里面流行的iOS库. 首先整理了一份Github上排名靠前的iOS库(大概600个repos) 除了逛一下每日/每月流行之外,也可以到这里来看一下整个iOS Repos的排名. 下面是一些比较流行的第三方库: HTTP 相比较之下

java中最常用jar包的用途说明

java中最常用jar包的用途说明,适合初学者 jar包 用途 axis.jar SOAP引擎包 commons-discovery-0.2.jar 用来发现.查找和实现可插入式接口,提供一些一般类实例化.单件的生命周期管理的常用方法. jaxrpc.jar Axis运行所需要的组件包 saaj.jar 创建到端点的点到点连接的方法.创建并处理SOAP消息和附件的方法,以及接收和处理SOAP错误的方法.   wsdl4j-1.5.1.jar Axis运行所需要的组件包 activation.ja

javaAPI中的常用 类 以及接口

java.lang包中的常用类以及接口 类 1. Integer :Integer 类在对象中包装了一个基本类型 int 的值.Integer 类型的对象包含一个 int 类型的字段. 2. Math :类包含用于执行基本数学运算的方法,如初等指数.对数.平方根和三角函数. 3 Double :类在对象中包装一个基本类型 double 的值.每个 Double 类型的对象都包含一个 double 类型的字段. 4 Object  :是类层次结构的根类.每个类都使用 Object 作为超类.所有对

python web开发-flask中日志的使用

Flask使用日志记录的方式: 1. 初始化flask应用实例 在flask中使用logger,需要初始化一个flask的应用 app = Flask(__name__) 2. 调用logger 直接调用logger方法 app.logger.info("my first logging") 这里记录的是info级别的日志 3. 查看结果 运行结果如下: INFO in Code [D:/xxxxx/flask/Code.py:20]: my first logging 默认情况下,f

flask中的wtforms使用

一.简单介绍flask中的wtforms WTForms是一个支持多个web框架的form组件,主要用于对用户请求数据进行验证. 安装: pip3 install wtforms 二.简单使用wtforms组件 1.用户登录 具体代码: from flask import Flask,render_template,request,redirect from wtforms.fields import core from wtforms.fields import html5 from wtfo