源码中的装饰器
def require_http_methods(request_method_list):
"""
Decorator to make a view only accept particular request methods. Usage::
@require_http_methods(["GET", "POST"])
def my_view(request):
# I can assume now that only GET or POST requests make it this far
# ...
Note that request methods should be in uppercase.
"""
def decorator(func):
@wraps(func)
def inner(request, *args, **kwargs):
if request.method not in request_method_list:
response = HttpResponseNotAllowed(request_method_list)
log_response(
'Method Not Allowed (%s): %s', request.method, request.path,
response=response,
request=request,
)
return response
return func(request, *args, **kwargs)
return inner
return decorator
通过 decorator实现对视图进行装饰器的封装,根据源码得出结论我们可以编写一个简单的装饰器
自定义装饰器
def decorator(func):
@wraps(func)
def inner(request, *args, **kwargs):
#在视图执行前执行我们的逻辑
response = func(request, *args, **kwargs)
# 在视图执行完毕后然后执行我们的逻辑
return
return inner
自定义的带参数的装饰器
def auth(lt= []):
def decorator(func):
@wraps(func)
def inner(request, *args, **kwargs):
#在视图执行前执行我们的逻辑,获取前端传递的参数进行校验,检验成功返回视图内容
#失败返回错误
for _ in lt:
try:
request.request.data.get(_)
response = func(request, *args, **kwargs)
except:
return "请传递正确的参数"
# 在视图执行完毕后然后执行我们的逻辑
return
return inner
return decorator