在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.后续会对权限管控这里统一一下接口,还没有实现,后续会对接口统一,然后对装饰器也会对应的优化一下逻辑,现在应该还存在很大问题

posted on 2018-05-21 11:59  小小白鸽  阅读(1584)  评论(0编辑  收藏  举报