一、蓝图

作用:给开发者提供目录结构

功能:1、自定义模板、静态文件目录

   2、给一类url加前缀

     3、给一类url添加before_request

目录结构

from flask_werkzurg import craete_app

app = create_app()

if __name__ == "__main__":
    app.run()

manage.py

from flask import Flask
from .views.account import ac

def create_app():
    app = Flask(__name__)
    app.register_blueprint(ac, url_prefix="/xxx")       #给ac中的所有url加前缀

    @app.before_request    #给全局所有视图加一个before_request,也可以分别在ac中加这个
    def xxx():
        xxxx

    return app    

__init__

from flask import Blueprint

ac = Blueprint("ac",__name__)

@ac.route("/index")
def login():
    return "xxx"    

account

二、session源码流程

三、threading.local

作用:根据每个线程的ID,为每个线程分配一块独立的空间,使得线程对自己空间里的数据进行操作(数据隔离)

import threading
from threading import local
import time

obj = local()

def task(i):
    obj.xxxxx = i
    time.sleep(2)
    print(obj.xxxxx,i)

for i in range(10):
    t = threading.Thread(target=task,args=(i,))
    t.start()

threading.local

如何实现一个threading.local 的功能?

import threading

import time

try:
    import greenlet
    get_ident = greenlet.getcurrent
except:
    get_ident = threading.get_ident

class Local(object):
    DIC = {}

    def __getattr__(self, item):
        ident = get_ident()
        if ident in self.DIC:
            return self.DIC[ident].get(item)
        return None

    def __setattr__(self, key, value):
        ident = get_ident()
        if ident in self.DIC:
            self.DIC[ident][key] = value
        else:
            self.DIC[ident] = {key: value}

obj = Local()
def task(i):
    obj.xxx = i
    time.sleep(2)
    print(obj.xxx, i)

for i in range(10):
    t = threading.Thread(target=task, args=(i,))
    t.start()

threading.local加强版

四、上下文管理

前导:

(1)偏函数:帮助开发者自动传递参数

import functools

def func(a1,a2):
    return a1+a2

new_func = functools.partial(func,666)
ret = new_func(1)
print(ret)   #得到667

(2)super不是去父类中找方法,而是根据继承顺序向上找。

(3)__setattr__的注意事项

class Foo(object):
    def __init__(self):
    # self.storage = {}
    object.__setattr__(self,'storage',{})

    def __setattr__(self, key, value):
    print(key,value,self.storage)

obj = Foo()
obj.xx = 123

五、将session数据保存到redis

1.安装falsk-session

2.

import redis
from flask_session import Session

app.config["SESSION_TYPE"] = "redis"
app.config["SESSION_REDIS"] = redis.Redis(host="", port=6379,password="")
Session(app)

六、创建数据库连接池

import pymysql
from DBUtils.PooledDB import PooledDB,SharedDBConnection

class Conf(object):
    SALT = b"asd"
    SECRET_KEY = "asdf"

    POOL = PooledDB(
        creator=pymysql,  # 使用链接数据库的模块
        maxconnections=6,  # 连接池允许的最大连接数,0和None表示不限制连接数
        mincached=2,  # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
        maxcached=5,  # 链接池中最多闲置的链接,0和None不限制
        maxshared=3,
        # 链接池中最多共享的链接数量,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='ywj971020',
        database='code_count',
        charset='utf8'
    )

settings.y

flask学习(二)的更多相关文章

  1. Flask学习 二 模板

    jinja2模版 from flask import Flask,render_template app = Flask (__name__) @app.route ('/<name>') ...

  2. flask学习(二):认识web

    url详解: URL是Uniform Resource Locator 的简写,统一资源定位符 一个URL由以下及几部分组成: scheme://host:port/path/?query-strin ...

  3. flask 学习(二)

    安装了flask扩展 以及flask-bootstrap 默认情况下,flask在template文件夹寻找模板. flask 加载的是Jinja2模板,该模板引擎在flask中由函数render_t ...

  4. web开发框架Flask学习二

    jinja2模板规范 在当前项目中创建一个文件为templates的文件夹,将其设置为模板文件夹,新建的html为模板页面, 在视图函数中使用render_template(".html的文 ...

  5. Flask学习目录

    目录 Flask学习初识 Flask学习二

  6. Flask 学习篇二:学习Flask过程中的记录

    Flask学习笔记: GitHub上面的Flask实践项目 https://github.com/SilentCC/FlaskWeb 1.Application and Request Context ...

  7. [ZHUAN]Flask学习记录之Flask-SQLAlchemy

    From: http://www.cnblogs.com/agmcs/p/4445583.html 各种查询方式:http://www.360doc.com/content/12/0608/11/93 ...

  8. Flask学习-Wsgiref库

    一.前言 前面在Flask学习-Flask基础之WSGI中提到了WerkZeug,我们知道,WerkZeug是一个支持WSGI协议的Server,其实还有很多其他支持WSGI协议的Server.htt ...

  9. Flask学习之六 个人资料和头像

    英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-vi-profile-page-and-avatars ...

  10. Flask学习之五 用户登录

    英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-v-user-logins 中文翻译地址:http:// ...

随机推荐

  1. centos下使用nginx 配置websocket,https升级wss协议

    服务端代码/***/ // 服务端代码 var express = require('express'); var app = express(); var path = require('path' ...

  2. 13 在 Django REST framework 善用 SerializerMethodField方法

    01-使用SerializerMethodField 来优化不必要的查询 class RepairQueueSerializer(serializers.ModelSerializer): # rq_ ...

  3. pycharm 安装dilb模块

  4. Excel阅读模式/单元格行列指示/聚光灯开发 技术要点再分享

    1. 引言 文题中所谓技术要点再分享,本意是想在大神Charltsing Liu的博文“简单介绍Excel单元格行列指示的实现原理(俗称聚光灯功能)”的基础上写一点个人开发体会.写本文的初衷有三点,一 ...

  5. 关联分析中寻找频繁项集的FP-growth方法

    关联分析是数据挖掘中常用的分析方法.一个常见的需求比如说寻找出经常一起出现的项目集合. 引入一个定义,项集的支持度(support),是指所有包含这个项集的集合在所有数据集中出现的比例. 规定一个最小 ...

  6. mysql创建函数之省市区数据查询

    DROP FUNCTION IF EXISTS queryChildrenAreaInfo;CREATE FUNCTION queryChildrenAreaInfo(areaId varchar(2 ...

  7. SpringBoot自动装配源码解析

    序:众所周知spring-boot入门容易精通难,说到底spring-boot是对spring已有的各种技术的整合封装,因为封装了所以使用简单,也因为封装了所以越来越多的"拿来主义" ...

  8. Python——pyqt5——消息框(QMessageBox)

    一.提供的类型 QMessageBox.information 信息框 QMessageBox.question 问答框 QMessageBox.warning 警告 QMessageBox.ctit ...

  9. macbook 入门

    前面的话 第一次使用 Mac 之前,需要改变一些原有思维,不应该使用 Windows 的思维习惯去使用 Mac,Mac 会节省系统维护.清理杀毒.升级驱动等操作的时间,让我们可以专注做真正重要的事情, ...

  10. iOS XIB使用中适配iPhoneX的安全区域、调用UiView动画

    2.调用UiView动画 WeakSelf; self.detailsViewBom.constant += 230; [UIView animateWithDuration:animotiontim ...