Hzangyao

导航

CBV源码分析及模板语法之传值 过滤器 标签 继承 导入

CBV的源码分析

# CBV的源码入口从哪里看呢?

CBV的核心源码:
	return self.dispatch(request, *args, **kwargs)
    def dispatch(self, request, *args, **kwargs):
        '''
            request.method => 获取请求方式: GET, POST(都是字符串)
            request.method.lower() => 把所有的请求方式都转为小写
            
        :param request: 
        :param args: 
        :param kwargs: 
        :return: 
        '''
        # http_method_names = ['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
        if request.method.lower() in self.http_method_names:
            '''
                getattr(self, request.method.lower()) 如果有的话,就返回函数的内存地址
                如果不在,是不是走getattr的第三个参数,第三个参数是默认值,
                如果找到了,handler就是方法的内存地址
            '''
            handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
        else:
            handler = self.http_method_not_allowed
        '''
            return get(request, *args, **kwargs)  立马执行函数
            return handler(request, *args, **kwargs)
        '''
        return handler(request, *args, **kwargs)
    
    

class IndexView(View):
    # 限制当前类支持的所有方法
    http_method_names = ['get', ]

    def get(self, request):
        return HttpResponse('get')

    def post(self, request):
        return HttpResponse('post')

模板语法

模板语法之传值

1. 传值
{{ }} # 一般给变量使用相关
{% %} # 一般跟逻辑相关的

2. 所有需要加括号的都不用加
3. '''模板文件一律使用点语法'''

模板语法之过滤器

# 相当于python的内置函数

语法:
	{{ 变量|过滤器:参数 }}
    '''竖杠左边的变量当成过滤器的第一个参数,冒号后面的当成第二个参数
    
    	如果冒号后面没有参数了,那就是只有一个参数。
    	过滤器最多传递两个参数。
    '''
# 过滤器有很多个,大概有六七十个,我们需要掌握四五个就行
1. length:求长度
2. default:竖杠左边为真,就显示竖杠左边的值,如果为假,则显示默认值。
3. date:格式化时间
4. filesizeformat
5. safe

'''
	安全相关的:
        1. MySQL中会出现SQL注入的问题
        2. 前端中会出现xss攻击
        3. django中的form表单中会出现csrf跨站请求问题
'''

 '''xss攻击:不让外部的标签直接生效'''
    # 前端的代码有时候也可以在后端写好,然后传递到前端使用
    from django.utils.safestring import mark_safe

    s = mark_safe('<h1>xss攻击</h1>')

模板语法之标签

# 在html中可以使用 if else for循环等

{% for foo in user_dict.keys %}
    <p>
        {{ foo }}
    </p>
{% endfor %}

{% for foo in user_dict.values %}
    <p>
        {{ foo }}
    </p>
{% endfor %}

{% for foo in user_dict.items %}
    <p>
        {{ foo }}
    </p>
{% endfor %}

模板语法之继承

# 页面之间互相继承。
结合代码一起看

模板导入

# 结合代码一起看

posted on 2022-03-24 10:26  Hzangyao  阅读(24)  评论(0编辑  收藏  举报