今天在将站内消息开发完毕之后,我发现一件很蛋疼的事,那就是发送站内信之后,用户那边不能及时刷新,除非用户主动点进站内信页面才可以看到消息,这样无非是很不友好的。
当然,我可以选择在每个视图函数都主动刷新一遍用户信息,但是这样的话既不利于代码的维护,更造成了大量代码耦合,那应该怎么做呢?
使用装饰器。
之前在使用Flask开发中,我就使用了装饰器,所以这次也是轻车熟路。
我先给出一个装饰器的模板,我们的装饰器都可以以这个模板为基础去拓展
def mydecorator(func):
def wrapper(*args,**kwargs):
return func(*args,**kwargs)
return wrapper
那么装饰器要怎么去使用呢?
以检测用户是否登录为例
def is_login(func):
def wrapper(request,*args,**kwargs):
# 若检测不到用户就跳转登录页面
if not request.session.get("user"):
return redirect(reverse('login'))
return func(request,*args, **kwargs)
return wrapper
@is_login
def myinfor(request):
user = User.objects.all()
return render(request, "myinfor.html", {"user": user})
这样,如果检测到用户未登录就会跳转到登录页面,我们可以用它装饰任何函数视图,注意只是函数,如果是类视图的话是不行的
在类视图中,我们需要使用如下方法去引用装饰器
from django.utils.decorators import method_decorator
# dispatch 代表装饰所有请求类型,如果想单独只装饰某个请求如get,我们可以将其改为get
@method_decorator(is_login, name='dispatch')
class IndexView(generic.ListView)
...
以上就是Django中装饰器在函数视图以及类视图中的简单使用
最后修改于2020年4月10日 21:33
©允许规范转载
Django Python版权声明:如无特殊说明,文章均为本站原创,转载请注明出处
本文链接:https://www.yangyingqi.com/36.html