flask之CBV

一 flask的CBV

from flask import Flask,views,url_for,render_template
app = Flask(__name__)


@app.route("/index")
def index():
    return "123"

#CBV
class Login(views.MethodView):
    methods = ["GET","POST"]#请求方式
    decorators = [app.route] #装饰器
#注意methods与decotators可以不写 def get(self): print(url_for("my_login")) return render_template("login.html") def post(self): return "登陆成功" app.add_url_rule("/",view_func=Login.as_view("my_login")) if __name__ == '__main__': app.run(debug=True) app.__call__ #对象加括号 会执行__call__方法 app.wsgi_app app.request_class

 注意:CBV中的views.MethodView   这里主要的原因你可以进入到views中的源码中看看,即可知道原因

views中的源码

主要注意的部分
class View(object):
    pass

class MethodViewType(type):
   pass

class MethodView(with_metaclass(MethodViewType, View):
   pass


只要看继承关系  由于MethodView继承了MethodViewType,View,因此我们直接使用views.MethodView即可

二  WTForms

#实现一个简单的web框架
from werkzeug.serving import run_simple
from werkzeug.wrappers import Response,Request

@Request.application
def app(request):
    print(request.path)
    return Response("200 OK!")


run_simple("0.0.0.0",5000,app)

# app()

三 偏函数

# by luffycity.com
from functools import partial  #partial 偏函数

def ab(a,*args):
    print(a,args)
    return a

par_ab = partial(ab,1)   #偏函数  将1的值给a 但不执行函数
print(par_ab(2))     #将2给*args  
print(par_ab)      

四  线程安全 local

作用:保证数据的一致性和完整性

#线程安全 
import time
import threading
from threading import local  #首先导入local

class Foo(local):
    pass

foo = Foo()
"""               
{
    7172:[request,session],  
 #local的作用相当于把数据存成字典,当不同的人来请求时,都只能带走自己的那个数据 这样就形成了数据安全
    8076:[request,session],
    5784:[request,session],
}
"""


def add(i):
    foo.num=i
    time.sleep(1)
    print(foo.num,i,threading.current_thread().ident)   #threading.current_thread().ident获取线程的id

for i in range(20):
    th = threading.Thread(target=add,args=(i,))
    th.start()
原文地址:https://www.cnblogs.com/mlhz/p/10256281.html