在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中应用装饰器的主要内容,如果未能解决你的问题,请参考以下文章

在django中应用装饰器

python使用上下文对代码片段进行计时,非装饰器

python使用装饰器@函数式化django开发

如果视图在 Django 中失败,如何创建默认错误装饰器?

基于类的视图的 Django 装饰器属性错误

用于重定向的 Django 自定义装饰器