zoukankan      html  css  js  c++  java
  • CBV

    一,FBV与CBV的定义

    1,FBV

    function函数对应view

    2,CBV

    view对应class类,即view中的对应的是一个类

    每一个类中有,get,post,等方法,当网页一这种方法发起时,会调用该方法。

    3,实例

    //view.py
    from django import views
    from django.utils.decorators import method_decorator
    
    //装饰器
    def outer(func):
        def inner(request,*args,**kwargs):
            print(request.method)
            return func(request,*args,**kwargs)
        return inner       
        
    
    class Login(view.View):
        @method_decorator(outer)
        //上面的方法的参数就是装饰器名
        def get(self,request,*args,**kwargs):
            return render(request,'login.html',{'msg':''})
    
        @method_decorator(outer)
        def post(self,request,*args,**kwargs):
            user=request.POST.get('user')
            pwd=request.POST.get('pwd')
            c=models.Administrator.objects.filter(username=user,password=pwd).count()
           if c:
                  request.session['is_login']=True
                  request.session['username']=user
                  rep=redirect('/index.html')
                  return rep
           else:
                  message='用户名或密码错误'
                  return render(request,'login.html',{'msg':message})
                  //msg对应于前端{{msg}}
                    


     urls中的映射类要加as_views()

    //urls.py
    from app1 import views
    urlpatterns=[
         url(r'^admin/',admin.site.urls),
        url(r'^login.html$',view.Login.as_view()),//类要加as_view()
        url(r'^login.html$',view.Login)    
       
    ]

     4,dispatch方法

    每一个类继承了views.View父类,父类中有一个方法dispatch,用于自动区分响应的方法,找到对应的方法。

    当想对每一个方法添加一个装饰器时,一个一个添加会很麻烦,但可以直接加在该方法上,可以省略代码

    //base.php
    //views.View基类中dispatch方法代码
    def dispatch(self,request,*args,**kwargs):
        if request.method.lower() in self.http_method_names:
            handler=gatattr(self,request.method.lower(),self.http_method_not_allowed)
            //将一个字符串转换为方法可以直接调用
        else:
            handler=self.http_method_not_allowed
        return handler(request,*args,**kwargs)
    def http_method_not_allowed(self,request,*args,**kwargs):
        pass
        

    给方法加装饰器

    from django import views
    from diango.utils.decorators import method_decorator
    
    //装饰器
    def outer(func):
        def inner(request,*args,**kwargs):
            print(request.method)
            return func(request,*args,**kwargs)
        return inner
    
    //@method_decorator(outer,name='dispatch')
    //方法二
    class Login(views.View):
        @method_decorator(outer)
    //方法一
        def dispatch(self,request,*args,**kwargs):
            ret=super(Login,self).dispatch(request,*args,**kwargs)
            //继承父类的dispatch方法
            return ret
        
        def get
  • 相关阅读:
    Linux 命令[5]:rmdir
    Linux 命令[4]:pwd,date
    Linux 命令[0]:起航
    Linux 命令[3]:cd
    vscode插件
    Object.freeze()
    插件
    前端开发调试线上代码
    前端自动化测试是浪费时间还是节约时间?
    踩坑之用lrz插件进行图片压缩
  • 原文地址:https://www.cnblogs.com/gjx1212/p/13650288.html
Copyright © 2011-2022 走看看