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 %}