2017年05月11日
阅读: 4802
Python + Django项目常用装饰器及自定义函数
友情提醒:本文最后更新于 2766 天前,文中所描述的信息可能已发生改变,请谨慎使用。
1. 自定义返回请求值的函数
def render_json(data, status=200):
return HttpResponse(json.dumps(data), content_type="text/json", status=status)
def render_json_error(message, status=400):
return render_json(message, status)
def response_401(msg="Unauthorized"):
return HttpResponse(msg + "\n", status=401)
def response_400(msg="Bad Request"):
return HttpResponse(msg + "\n", status=400)
def response_403(msg="Forbidden"):
return HttpResponse(msg + "\n", status=403)
def response_404(msg="Not Found"):
return HttpResponse(msg + "\n", status=404)
def response_200(msg="OK"):
return HttpResponse(msg + "\n", status=200)
2. 自定义格式化时间的函数
def format_time(date):
return date.strftime("%Y-%m-%d %H:%M")
3. 操作日志装饰器
def record_operate(action=""):
"""
操作记录装饰器, 用于记录用户操作的装饰器
"""
def decorator(view_func):
@wraps(view_func)
def _operate_record(request, *args, **kwargs):
if request.method == "POST":
data = json.dumps(request.POST).decode("raw_unicode_escape")
try:
RecordOperate.objects.create(
hera_user_id=1,
action=action,
data=data,
)
except Exception as ex:
SysLogger.exception(ex, request)
return view_func(request, *args, **kwargs)
return _operate_record
return decorator
4. 权限需求装饰器
def admin_required(func):
@wraps(func)
def _wrapper(request, *args, **kwargs):
role = request.session['role']
if role == USER_ROLE[0]:
return render_json({'success': False, 'message': _('Sorry, you have no permission')})
else:
return func(request, *args, **kwargs)
return _wrapper
5. 要求登录装饰器
def login_require(func):
@wraps(func)
def _wrapper(request, *args, **kwargs):
if 'user_id' not in request.session:
request.user = None
return render(request, 'portal/login/login.html')
else:
return func(request, *args, **kwargs)
return _wrapper
6. 导航栏选中变亮装饰器
def active_navs(*nav_args):
def active_navs_wrapper(func):
@wraps(func)
def _wrapper(request, *args, **kwargs):
request.actives = nav_args
return func(request, *args, **kwargs)
return _wrapper
return active_navs_wrapper
7. 计算函数执行时间
def time_use():
@wraps(view_func)
def _time_use(*args, **kwargs):
start = time.time()
return view_func(*args, **kwargs)
end = time.time()
print(end - start)
return _time_use
上一篇:Django项目常用验证及写法
下一篇:Ubuntu修改gem源