flask 中的一些理解

1,flask 会自动生成线程池,每次取出一个线程作专门来处理请求,一个函数一个线程

2, 要想让视图函数能够访问请求对象,一个显而易见的方式是将其作为参数传入视图函数,也就是将 url 传递到视图函数之中。但是如果视图函数想要访问其他对象,会变得很困难!这也就产生了上下文的概念

#request 上下文对象
@app.route('/')
def index():
    return request.headers.get('User-Agent')

3,Flask 在分发请求之前激活(或推送)程序和请求上下文
4,请求发出会通过URL 映射中查找请求的 URL
5,在setting文件之中,定义Config 来定义通用的属性,使用其他的类来继承Config用来完成差异化
6,采用工厂模式来设置来返回创建的app,好处是运行时创建app实例,只有调用 create_app() 才能创建实例

#也可以将日志存放在 __init__.py之中
def create_app():
    app = Flask(__name__)
    app.config.from_object(config[config_name])
    return app

7,蓝图要模块化,在模块__init__,py文件创建蓝图,需要在 上一步注册

from flask import Blueprint
main = Blueprint('main', __name__)
#新的模块再次划分views,errors 导入
from . import views, errors

8,Flask为请求会话和一个额外对象(你可以在 g 上放置自己的东西)使用线程局域对象(实际上是上下文局域对象,它们也支持greenlet上下文),
9, flask应用的server并非只有一种类型,它是可以设定的,默认情况下创建的是一个 BaseWSGIServer。
10,如果指定了threaded参数就启动一个ThreadedWSGIServer,如果设定的processes>1则启动一个ForkingWSGIServer。
11, hreadingMixIn继承ThreadingMixIn和BaseWSGIServer ,ThreadingMixIn的实例是以多线程的方式去处理每一个请求。将threaded设置没True后,每一个请求都会开启一个单独的线程去处理
12, 只有在启动app时将threaded参数设定为True,flask才会真正以多线程的方式去处理每一个请求。
13,db.relationship() 中的 backref 参数向 User 模型中添加一个 role 属性,从而定义反向关
系。这一属性可替代 role_id 访问 Role 模型,此时获取的是模型对象,而不是外键的值,backref 在关系的另一个模型中添加反向引用

class Role(db.Model):
    users = db.relationship('User', backref='role')
class User(db.Model):
    role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

 14, 表单全部刷新,ajax是局部刷新。

posted @ 2018-05-31 16:38  十七楼的羊  阅读(177)  评论(0编辑  收藏  举报