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 %} 
原文地址:https://www.cnblogs.com/surpass123/p/12987190.html