在django中应用装饰器
Posted superpigeons
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在django中应用装饰器相关的知识,希望对你有一定的参考价值。
在新写的博客应用中,涉及很多关于权限的问题,比如修改用户信息,博客的修改与删除,虽然默认的提交信息都是session的用户,但是也应该防止一下篡改提交的可能,之前想的是在每个view中加一段判断的逻辑,判断请求的request.user和提交数据中的用户是否是同一个用户,也算是比较初级的一个判定把,后来想想如果后面涉及的接口越来越多,重复的代码就会很多,查了很多资料,感觉这个功能可以用装饰器来实现,
def inter_permission(func): def wrapper(*args, **kwargs): for arg in args: request = arg for kwarg in kwargs: username = kwargs[kwarg] if request.method == ‘GET‘: if str(request.user) == username: return func(*args, **kwargs) else: return redirect(‘/‘) if request.method == ‘POST‘: if str(request.user) == request.POST[‘permission_name‘]: return func(*args, **kwargs) else: return HttpResponse(‘permission denied‘) return wrapper
关于装饰器的内容,我这里就不叙述了,网上一搜一大把,主要是在这里记录一下我的个人想法,
1.对于装饰的方法或者类的参数数量问题,*args, **kwargs即可满足所有参数类型,这里还有一个小插曲就是url.py中的参数是属于dict类型,否则的话只用*args就可以满足普通的参数
2.对这个装饰器我只是进行一个初步的构造,处理逻辑大致分为GET和POST,普通的GET可以通过url中获取参数,POST则是从post内容中获取,所以在这里区分了一下
3.后续会对权限管控这里统一一下接口,还没有实现,后续会对接口统一,然后对装饰器也会对应的优化一下逻辑,现在应该还存在很大问题
以上是关于在django中应用装饰器的主要内容,如果未能解决你的问题,请参考以下文章