楚阿旗

博客园 首页 新随笔 联系 订阅 管理

使用cbv實線視圖

from django.views import View
from django.utils.decorators import method_decorator


class LoginView(View):

    def get(self, request):
        return render(request, "login.html")

    def post(self, request):
        user = request.POST.get("name")
        pwd = request.POST.get("pwd")
        if user == "safly" and pwd == "123":
            # 登陆成功
            # 写session
            request.session["user2"] = user
            request.session.set_expiry(5)
            return redirect("/index/")

def index(request):
    return render(request,"index.html")

CBV结合装饰器

直接加在视图类上,但method_decorator必须传 name 关键字参数

from django.views import View
from django.utils.decorators import method_decorator


def wrapper(func):
    @wraps(func)
    def inner(request, *args, **kwargs):
        # 登录校验
        cookie_k = request.session.get("user01", None)
        if cookie_k:
            # 表示已经登录的用户
            ret = func(request, *args, **kwargs)
            return ret
        else:
            # 滚去登录
            return redirect("/login/")

    return inner


class LoginView(View):

    def get(self, request):
        return render(request, "login.html")

    def post(self, request):
        user = request.POST.get("name")
        pwd = request.POST.get("pwd")
        if user == "safly" and pwd == "123":
            # 登陆成功
            # 写session
            request.session["user01"] = user
            # request.session.set_expiry(5)
            return redirect("/index/")


@method_decorator(wrapper, name="get")
class IndexView(View):
    def get(self, request):
        user = request.session.get("user01", "游客")
        return render(request, "index.html", {"user": user})

* 加在CBV视图的get或post方法上*

# @method_decorator(wrapper, name="get")
class IndexView(View):
    @method_decorator(wrapper)
    def get(self, request):
        user = request.session.get("user02", "游客")
        return render(request, "index.html", {"user": user})

* 加在dispatch方法上*

# @method_decorator(wrapper, name="get")
class IndexView(View):
    ## 这么写所有的请求方法都要做登录校验
    @method_decorator(wrapper)
    def dispatch(self, request, *args, **kwargs):
        return super(IndexView,self).dispatch(request,*args,**kwargs)

    # @method_decorator(wrapper)
    def get(self, request):
        user = request.session.get("user04", "游客")
        return render(request, "index.html", {"user": user})

 

 

————————————————
版权声明:本文为CSDN博主「丙申」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u013210620/article/details/79176391

posted on 2019-11-21 11:46  楚阿旗  阅读(70)  评论(0)    收藏  举报