django之:网页伪静态 JsonResponse form表单携带文件数据 CBV源码分析 模板语法传值 模板语法之过滤器 标签 自定义标签函数 过滤器、inclusion_tag模板的继承导入

一:网页伪静态

1.定义

把动态网页伪装成静态网页,从而提升网页被搜索引擎收录的概率

2.如何实现

在路由层写url的时候加上网页文件的后缀名

path('login.html', views.login)

二:视图层

1.视图函数返回值问题

1.HttpResponse其实是一个类

2.通过查看源码得出,视图层必须返回一个HttpResponse对象

2.视图层返回json格式的数据

1.JsonResponse:可以把后端的数据封装成Json,传到前端页面

2.通过查看源码,得到JsonResponse方法的两个重要参数:json_dumps_params={‘ensure_ascii’:False} 和 safe=False

  • json_dumps_params={‘ensure_ascii’:False}:取消编码
def index(request):
    dict1 = {'name': 'wang', 'age': 18, 'hobby':'唱歌'}
    return JsonResponse(dict1, json_dumps_params={'ensure_ascii': False})
  • safe=False:允许非字典类型数据安全展示
def index(request):
    list1 = [11, 33, 55, 66]
    return JsonResponse(list1, safe=False)
3.form表单携带文件数据

1.后端想要从前端得到提交过来的文件数据,必须做以下准备

  • 1.method属性值必须是post
  • 2.enctype属性值必须是:multipart/form-data

2.后端获取文件数据的方法

  • request.FILES
  • request.FILES.get(‘nam文件名’)
file_obj = request.FILES.get('file')
with open('file_obj.name', 'wb') as f:
    for line in file_obj:
        f.write(line)
4.CBV源码分析
1.CBV和FBV:
  • CBV:基于函数的视图
def index(requet):
    return HttpResponse('你好哦')
  • FBV:基于类的视图
from django import views

class MyView(views.View):
    def get(self, request):
        pass
    
    def post(self, request):
        pass
2.CBV源码分析:
  • 1.从as_view方法着手
path('cbv/', views.Cbv.as_view()),
  • 2.进入查看as_view方法
def as_view(...):
    return view
  • 3.由于as_view函数的的返回值是view这个函数名,所以上述的url可以写成是
path('cbv/', views.Cbv.view),
  • 4.当url匹配到内容的时候,会调用函数view,由于我们自己写的cbv中没有view函数,所以去继承的父类中查看
def view(request, *args, **kwargs):
    return self.dispatch(request, *args, **kwargs)
  • 5.view函数的返回值是dispatch方法,这个方法我们自己写的类中没有,继续去父类中查找
def dispatch(...):
    func_name = getattr(obj,request.method.lower())
	# handler = getattr('自定义的类的对象',‘类中的方法’) 
	return handler(...)  # 这里直接调用我们自己写的类中的方法
  • 结论:CBV的本质其实就是FBV

三:模板层

1.模板语法传值

1.方式一:指名道姓,节省资源

return render(request, 'home.html', {'name':name, 'age':age})

2.方式二:整体传值

return render(request, 'home.html', locals())
2模板语法的传值范围

1.基本数据类型:支持python中所有的数据类型,直接传递使用

2.函数名:会自动加括号执行,并把函数的返回值展示到页面上(不支持有参函数)

3.类名:会自动加括号产生对象,展示到前端页面上

4.对象:直接传递使用即可

总结:模板语法会判断每一个名字是否可调用,如果可以则直接调用

3.模板语法之过滤器
基本过滤器功能使用
length统计长度{{ s | length }}
add加法运算{{ i | add: 123}}
date日期转换{{ s | date: 'Y-m-d H:i:s ’ }}
filesizeformat文件大小{{ file | filesizeformat }}
slice数据切片{{ l | slice: ‘0 : 10’}}
truncatewords单词截取(以空格){{ s1 | truncatewords: 6}}
truncatechars字符截取(三个点算一个){{ s1 | truncatechars: 6}}
safe语法转义(后端写的前端页面别允许展示){{ script_tag | safe}}
4.语法转义:
  • 有时候html页面上的数据不一定非要在html页面上编写了 也可以后端写好传入
from django.utils.safestring import mark_safe
script_tag = '<script>alert(111)</script>'
res = mark_safe(script_tag)
5.模板语法标签(类似于python中的流程控制)
  • if 判断:条件一般是模板语法传过来的数据 直接写名字使用即可
	{% if 条件 %}  
        条件成立执行的代码
    {% elif 条件1 %}
 		  条件1成立执行的代码	
    {% else %}
       	 条件都不成立执行的代码
    {% endif %}
  • for 循环
 {% for i in s %}
        {% if forloop.first %}
            <p>第一次</p>
        {% elif forloop.last %}
            <p>最后一次</p>
        {% else %}
            <p>{{ i }}</p>
        {% endif %}
        {% empty %}
        	  <p>当结果为空时,执行</p>
    {% endfor %}
6.自定义标签函数、过滤器、inclusion_tag
1.自定义过滤器

1.步骤:

  • 1.在应用下创建一个名为templatetags文件夹
  • 2.在该文件夹创建任意名字的py文件
  • 3.在该py文件中编写自定义的相关代码
from django.template import library
register = library()

@register.filter(name='myfilter')
def my_add(a,b):
    return a+b

 # 下面时需要写在前端的代码
 {% load mytag %}
 {{ i|myfilter:1 }}
2.自定义标签函数
 @register.simple_tag(name='mt')
    def func(a, b, c, d):
        return a + b + c + d
    
  # 下面时需要写在前端的代码
 {% load mytag %}
 {% mt 1 2 3 4 %}
3.自定义inclusion_tag
 @register.inclusion_tag(filename='it.html')
    def index(n):
        html = []
        for i in range(n):
            html.append('第%s页'%i)
        return locals()
    
    
  # 下面时需要写在前端的代码
 {% load mytag %}
 {% index 10 %}
7.模板的继承

1.被继承版中的操作:继承3个区域:css, js, content

{% block css %}
{% endblock %}

{% block content %}
{% endblock %}

{% block js %}
{% endblock %}

2.新html页面中的操作

{% extends 'html文件名' %}
   	{% block 名字 %}
    	自定义模板内容
	{% endblock %}

3.子模版中还可以使用母版中的内容

{{ block.super }}
8.模板的导入

将html页面的某个部分当做模块的形式导入使用

{% include 'a.html' %}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值