一、零散知识点

2个月前 阅读 109 评论 0 赞 0

一切皆对象,函数也是对象,只是给他加个括号就会执行。

写装饰器用于做url路由和用户认证:

def identify(func):
def inner(args,kwargs):
user = session.get(‘user_info’)
if not user:
return redirect(‘/login’)
return func(args,
kwargs)
return inner

@app.route(‘/detail/<int:nid>‘, methods=[‘GET’, ‘POST’],endpoint=’n1’)
@identify
def detail(nid):
info = USERS.get(nid)
return render_template(‘detail.html’, info=info)

@app.route(‘/index/‘,methods=[‘GET’, ‘POST’],endpoint=’n2’)
@identify
def index():
user = session.get(‘user_info’)
return render_template(‘index.html’, user_dict=USERS)

执行完@identify,返回的是inner,如果不加endpoint=’…’,默认是取函数名(inner)的
装饰器在上面和下面是不一样的,@identify装饰器应该在下面

如果不加endpoint,可以使用@functools.wraps(func)

def identify(func):
@functools.wraps(func)
def inner(args,kwargs):
user = session.get(‘user_info’)
if not user:
return redirect(‘/login’)
return func(args,
kwargs)
return inner

@app.route(‘/detail/<int:nid>‘, methods=[‘GET’, ‘POST’])
@identify
def detail(nid):
info = USERS.get(nid)
return render_template(‘detail.html’, info=info)

@app.route(‘/index/‘,methods=[‘GET’, ‘POST’])
@identify
def index():
user = session.get(‘user_info’)
return render_template(‘index.html’, user_dict=USERS)

图片1
如果不加@functools.wraps(func)输出的就都是inner

类似Django中间件的操作:
例如:当CPU占用率达90%时发送报警:邮件/短信/微信
需要进行不同的数据库的操作时
缓存放在不同地方时

开放封闭原则:利用反射机制实现
源码不改,配置文件里面随便改;
代码文件之间没有什么耦合,如果不需要发短信了,直接在配置文件里面找到并注释掉即可;
可扩展性强;

如何保证别人知道代码里面必须要写send,实现类似java里面的接口:
写一个Base类,使其他类实现这个类:
class Base(object):

def send(self):
raise NotImplementedError(‘未实现send方法!’)
from .base import Base
class Msg(Base):
图片2
图片3图片4图片5

request.url是拿到全部的url
request.path是拿到后面的/index

class Foo():
init():
self.age = 18 (age表示私有成员)

get_age(self):
return self.__age

print(obj.__age)不行
print(obj.get_age)行

print(obj._Foo__age)强制获取私有字段

缺:
day139:用setsttr()实现类似LocalThreading的功能详细
day140:request请求怎么处理的
蓝图的大小型模板
上下文的整理
wtform实现的源码分析:1.metaclass解析2.form= LoginForm()实例化过程3.form.validate()过程

你的支持将鼓励作者继续创作

评论(0)

(无)