Django 视图层和模板层
1|0一、网站首页和404页面的路由配置
1|11. 网站首页路由
1|22. 404页面
2|0二、Django视图层
2|11. 小白必会三板斧
(1)HttpResponse
(2)render
(3)redirect
- 视图函数必须有一个返回值,并且返回值的数据类型必须是
HttpResponse
对象。(render 和 redirect 方法内部其实最后都是返回的HttpResponse
对象)
2|22. JsonResponse
-
导入方法,不同于上面的三板斧:
from django.http import JsonResponse
-
HttpResponse
会直接返回字符串类型的数据到前端,JsonResponse
会返回一个json数据格式的数据到前端。
(1)前后端分离后数据的交互
- 通常情况下前后端数据交互采用的都是json的字符串(字典)
- 后端只需要写好相应的url接口 前端访问你这个接口
- 在实际工作中,你只需要返回一个大字典即可 + 开发文档
- 用来告诉前端工程师 你这个接口能够返回哪些数据
(2)前后端序列化和反序列化
-
python后端的序列化
-
-
前端的JS序列化
-
-
python后端的反序列化
-
-
前端的JS反序列化
-
(3)python的json模块的特点
-
在使用json序列化对象时,若对象中含有中文,则会把中文编码成二进制类型。
-
解决方法:
-
(4)JsonResponse的序列化特点
-
JsonResponse
方法默认是序列化字典用的,如果你想序列化其他数据类型(json模块能够序列化,但是JsonResponse不行) ,你需要加一个safe参数;在使用JsonResponse方法时它内部也是使用json序列化,若对象中含有中文,则会把中文编码成二进制类型。 -
后端传到前端的json格式数据,前端会直接自动反序列化成JS对象。
2|33. FBV与CBV
(1)FBV(基于函数的视图)
(2)CBV (基于类的视图)
-
CBV能够根据请求方式的不同,自动执行不同的方法。
-
在python中,函数加括号的执行优先级最高
(3)CBV源码的功能流程
-
调用
url(r'^login/',views.MyLogin.as_view())
中的as_view
方法,它是类的绑定方法。 -
as_view
方法中,包含一个view
方法,形成一个闭包函数,最后把view
函数返回出去。 -
在
view
方法中,实例化一个MyLogin
类的对象,再用这个对象调用dispatch
方法,最后把dispatch
方法的返回值返回出去。 -
dispatch
方法中,判断当前请求方式在不在默认的八个请求方式中,若在,则通过对象的反射,得到对应的请求函数地址,最后调用请求函数,把其返回值返回出去。
若不在,则通过对象调用
http_method_not_allowed
方法,把其返回值返回出去。
各部分源码展示:
2|44. 给CBV加装饰器
-
给CBV加装饰器,推荐使用内置模块
3|0三、Django模板层(即templates的html文件)
3|11. 模板语法
-
只有两种书写格式
3|22. 给模板传值
(1)传值的数据类型
-
python基本数据类型,(整型,浮点型,字符串,列表,元组,字典,集合,布尔值)
-
传函数名
{{ func }}
- 给HTML页面传递函数名的时候,模板语法会自动加括号调用该函数,并且将函数的返回值当做展示的数据
- 模板语法不支持函数传参,也就意味着,你传给html页面的只能是不需要传参调用的函数,即无参函数和有默认形数的函数
-
传类名
{{ MyClass }}
- 在html文件中,会自动加括号产生对象
-
传对象
{{ obj }}
- 传过来的对象,仍然可以使用对象点属性的方式取值或者调用方法。
- 总结:只要是正常情况下能够加括号调用的(不包含在定义类是使用
__call__
),其实就是普通的函数和类,传递到html页面上都会自动加括号调用。
(2)模板中的取值方式
-
在django中,它的模板语法只能使用容器类型名 点 的方式来取值(点key值或者点索引值)。
-
当通过点的方式长度太长,可以通过关键字
with
给其取一个别名 -
实例:
(3)给模板传值的方式
- 给html页面传值的两种方式
-
指定道姓 当需要传递的变量名特别多的情况下 有点麻烦
-
-
locals()
方法传值-
locals()
会将当前所在名称空间中所有的名字全部传递给html页面 -
-
3|33. 过滤器
(1)语法结构
-
-
最多只能有两个参数
(2)各个过滤器
3|44. 标签,逻辑相关
(1)if/elif/else
(2)for
(3)for和if 联用
3|55. 自定义过滤器和标签
- django支持用户自定义
- 注意:自定义的过滤器可以在逻辑语句使用,而自定义的标签不可以,会报错
(1)步骤:
-
在应用名下新建一个名字必须叫templatetags的文件夹
-
在该文件夹内 新建一个任意名称的py文件
-
在该py文件中 必须先写下面两句代码,之后就可以利用register来自定义过滤器和标签
(2)自定义过滤器实例:
(3)自定义标签实例:
- 可以接受任意多个参数
(4)自定义inclusion_tag
-
是一个函数,能够接受外界传入的参数 然后传递给一个html页面,页面上获取数据 渲染 完成之后,将渲染好的页面,放到调用
inclusion_tag
的地方 -
当你需要使用一些页面组件的时候 并且该页面组件需要参数才能够正常渲染 你可以考虑使用inclusion_tag
-
实例:
3|66. 模板的继承
-
继承的作用:一个页面拥有另一个页面的内容,并在原来的内容上修改某一块区域的内容。
-
你需要事先在你想要使用的页面上,划定区域,之后在继承的时候,你就可以修改你划定的区域。也就意味着 如果你不划定任何区域 那么你将无法修改页面内容
(1)模板继承的步骤
(2)划定的语法
(3)继承的语法
(4)沿用父页面的内容
(5)注意
3|77. 模板的导入
-
将html页面当做模块的直接导入使用
-
语法:
-
模板导入实例:
__EOF__

本文链接:https://www.cnblogs.com/Mcoming/p/11938317.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!