flask学习(二)
一、蓝图
作用:给开发者提供目录结构
功能: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学习(二)的更多相关文章
- Flask学习 二 模板
jinja2模版 from flask import Flask,render_template app = Flask (__name__) @app.route ('/<name>') ...
- flask学习(二):认识web
url详解: URL是Uniform Resource Locator 的简写,统一资源定位符 一个URL由以下及几部分组成: scheme://host:port/path/?query-strin ...
- flask 学习(二)
安装了flask扩展 以及flask-bootstrap 默认情况下,flask在template文件夹寻找模板. flask 加载的是Jinja2模板,该模板引擎在flask中由函数render_t ...
- web开发框架Flask学习二
jinja2模板规范 在当前项目中创建一个文件为templates的文件夹,将其设置为模板文件夹,新建的html为模板页面, 在视图函数中使用render_template(".html的文 ...
- Flask学习目录
目录 Flask学习初识 Flask学习二
- Flask 学习篇二:学习Flask过程中的记录
Flask学习笔记: GitHub上面的Flask实践项目 https://github.com/SilentCC/FlaskWeb 1.Application and Request Context ...
- [ZHUAN]Flask学习记录之Flask-SQLAlchemy
From: http://www.cnblogs.com/agmcs/p/4445583.html 各种查询方式:http://www.360doc.com/content/12/0608/11/93 ...
- Flask学习-Wsgiref库
一.前言 前面在Flask学习-Flask基础之WSGI中提到了WerkZeug,我们知道,WerkZeug是一个支持WSGI协议的Server,其实还有很多其他支持WSGI协议的Server.htt ...
- Flask学习之六 个人资料和头像
英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-vi-profile-page-and-avatars ...
- Flask学习之五 用户登录
英文博客地址:http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-v-user-logins 中文翻译地址:http:// ...
随机推荐
- .NET、PHP、MySql、JS中的时间戳你每次是手写还是复制?这篇文章让你一次性搞懂
什么是时间戳(chuō)? 答:时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数. 为什么时间戳要从1970年01月0 ...
- 修改DEDECMS文章标题长度,解决DEDECMS文章标题显示不全
dedecms系统使用过程中,常遇到输入的标题原本输入的字数跟保存成功后的数字长度不一样,这个是因为 织梦dedecms系统默认的文章标题字数限制是60,也就是只能输入30个汉字,超过的会自动截断删除 ...
- 在IIS上搭建Exceptionless日志收集框架
系统环境要求 .NET 4.6.1,如果已安装过VS请忽略.Java Sdk1.8+,Win10环境下配置Java 环境变量参考,ElasticSearch 5.1,它是一个基于Lunce搜索服务器. ...
- ArrayList循环遍历并删除元素的几种情况
如下代码,想要循环删除列表中的元素b,该怎么处理? public class ListDemo { public static void main(String[] args) { ArrayList ...
- 使用PHP操作ElasticSearch
如何搭建ES环境和使用CURL操作可以参考我的另一篇文章:ElasticSearch尝试 网上很多关于ES的例子都过时了,版本很久,这篇文章的测试环境是ES6.5 通过composer 安装 comp ...
- Stars project
说明:收藏一些比较好的开源项目 Python实现了所有的排序算法 Github:https://github.com/TheAlgorithms/Python 该项目用Python实现了所有的排序算法 ...
- TsinsenA1489 抽奖 【期望】
题目分析: 问题可以转化成将m个球放进n个盒子里,每个盒子的贡献为盒子中球数的平方. 第一问考虑增量. 对于一个原本有$x$个球的盒子,新加一个球的贡献是$2x+1$.期望条件下仍然满足. 第$i$个 ...
- 【Spring】Spring随笔索引
Spring随笔索引 [Spring]Spring bean的实例化 [Spring]手写Spring MVC [Spring]Spring Data JPA
- v-for 循环element-ui菜单
vue 使用了element-ui的菜单组件, 这个组件的el-menu-item项上,有一个属性index,值是字符串类型, 在使用v-for的index时,它是一个数值型,所以如果直接写index ...
- 题解 P4783 【【模板】矩阵求逆】
题目大意 求一个N×N的矩阵的逆矩阵.答案对10^9+7取模.N<=400 前置知识 矩阵的初等变换 矩阵的逆定义为 A*B=E(E为单位矩阵)此时B为A的逆 思路 如果矩阵有逆 那么这个矩阵经 ...