写点简单的装饰器

一个计算函数运行时间的装饰器:

1
2
3
4
5
6
7
8
import datetime
def cal_time(func):
def cal_func(*args, **kargs):
start = datetime.datetime.now()
result = func(*args, **kargs)
end = datetime.datetime.now()
print('cost_time:', (end - start).microseconds)
return cal_func
1
2
3
4
@cal_time
def add(a, b)

add(1, 2)

在访问网页时判断用户是否登陆:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse

from user.models import Users

def is_login(func):
def check_login(request):
# 如果登陆,返回函数func
ticket = request.COOKIES.get('ticket')
if not ticket:
# 没有登陆,跳转到登陆页面
return HttpResponseRedirect(reverse('user:login'))
user = Users.objects.filter(ticket=ticket)
if not user:
return HttpResponseRedirect(reverse('user:login'))
return func(request)
return check_login

这里是使用的ticket来模拟session id,没有使用Django自带的request.session,通过判断请求中的seesion id是否存在以及与session是否一致来判断用户是否登陆,可以放在需要登陆才能访问的视图函数之前.

在Django中实现判断用户是否登陆还可以中间件来实现,方法多样.