zoukankan      html  css  js  c++  java
  • day64日考

    day64考题

    考题

    """
    今日考题
    1.什么是FBV与CBV,能不能试着解释一下CBV的运作原理
    2.模版语法的传值需要注意什么,常见过滤器及标签有哪些
    3.自定义过滤器,标签,inclusion_tag的流程
    4.什么是模版的继承与导入,如何正确使用
    """
    

    1.什么是FBV与CBV,能不能试着解释一下CBV的运作原理

    FBV:功能函数视图,用函数来定义视图
    CBV:类视图,用类来定义视图
    
    CBV运作原理:内部通过调用闭包函数,将类与参数传递进去,实例化我们需要的对象,返回一个self.dispatch(request,*args,**kwargs)分发函数,在分发函数中判断请求方式的小写是否符合,不符合记录警告日志并报错,符合的话,返回类视get(request,*args,**kwargs)
    在as_view()函数中返回view函数名
    
    CBV本质上还是一个FBV
    
    url(r'^login/',views.MyLogin.as_view())
    
    def as_view(cls,**initkwargs):
        ...
        def view(request,*args,**kwargs):
            # 闭包函数传值
            self = cls(**initkwargs) # self = MyLogin(**initkwargs)
            self.request = request
            self.args = args
            self.kwargs = kwargs
            return self.dispatch(request,*args,**kwargs) # 返回了一个分发函数
            ...
        return view
    
    所以
    url(r'^login/',views.MyLogin.as_view())
    等价于
    url(r'^login/',views.view)
    
    查看dispatch
    
    def dispatch(request,*args,*8kwargs):
        """
        self.http_method_names = ['get','post',...]
        """
         if request.method.lower() in self.http_method_names:
                handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
            else:
                handler = self.http_method_not_allowed
            return handler(request, *args, **kwargs) # get(request,*args,**kwargs) 或者post(request,*args,**kwargs)
    

    2.模版语法的传值需要注意什么,常见过滤器及标签有哪些

    注意:模板语法会判断传入的值是否是可调用的(针对类名和函数名),如果是可调用的,会自动加括号调用
    
    常见的过滤器:length date safe slice filesizeformat truncatechars
    truncatewords cut default
    
    常见的标签有:for if with...as
    

    3.自定义过滤器,标签,inclusion_tag的流程

    主要流程:
    (1)首先在应用文件夹(app01)下创建一个templatetags文件夹
    (2)在该文件夹下创建一个,mytag.py文件
    (3)在py文件中导入:
    from django import template
    register = template.Library()
    
    # 自定义过滤器
    @register.filter(name='xxx')
    # 自定义标签
    @register.simple_tag(name='yyy')
    # inclusion_tag
    @register.inclusion_tag('left.html')
    
    模板中使用
    {% load mytag %}
    {{l|过滤器:参数}}
    
    {{% 标签 参数 %}}
    
    {% tag 参数 %}
    
    

    4.什么是模版的继承与导入,如何正确使用

    继承网页中所有内容,改部分内容变成另外的界面,css,js,content
    {% extends '网页' %}
    {% block 名称 %}
    ...
    {% endblock %} 
    
  • 相关阅读:
    局域网中配置多台机器可以登录远程桌面
    集合类接口IEnumerable,IEnumerator,ICollection,IList,IDictionary理解
    C#只允许运行应用程序的一个实例的正确写法
    windows快捷启动命令
    .Net中的Attribute
    NAnt学习笔记(1) NAnt的配置文件结构和一个简单的NAnt例子
    互联网项目管理要点(转)
    .net中的对象序列化(2):三种序列化方式
    NAnt学习笔记(2) 节点的含义解释
    如何在修改checkbox状态,不触发事件
  • 原文地址:https://www.cnblogs.com/surpass123/p/12987190.html
Copyright © 2011-2022 走看看