Django学习笔记二

Django学习笔记二,第1张

Django学习笔记二

我是小咸鱼,继续学习django~

一、知识了解

1、传统的MVC
MVC代表 Model-View-Controller(模型-视图-控制器)模式

  • M 模型层(model),主要用于对数据库层的封装
  • V 视图层(view),用于向用户展示结果(WHAT+HOW)
  • C 控制层(controller),用于处理请求,获取数据,返回结果(重要)
    作用:降低模块间的耦合度(解耦)

2、Django 的MTV模式
MTV代表 Model-Templates-View(模型-模板-视图)模式

  • M 模型层(model),负责与数据库交互
  • T 模板层(Templates),负责呈现内容到浏览器(HOW)
  • V 视图层(view),是核心,负责接收请求,获取数据,返回结果(WHAT)
    作用:降低模块间的耦合度(解耦)
二、模板加载方式 1、通过loader获取模板,通过HttpResponse进行响应

1)、在mysite1目录下新建templates目录(和同名文件夹mysite1同级),然后新建test_html.html文件

2)、在setting.py下修改路径

3)、主路由添加路径

4)、视图函数通过loader获取模板,然后HttpResponse响应

2、使用render() 直接加载并响应模板

在视图函数里面做修改:

三、视图向模板传变量

在视图函数定义变量,在模板里用{{}}进行调用

:当变量太多且参与运算时,可以不用写成dic形式,直接用 locals() 返回即可。

四、模板标签
1、作用:将一些服务器端的功能嵌入到模板中,例如流程控制
2、标签语法:
	{%标签%}
	......
	{%结束标签%}
3、举例如下:



五、模板过滤器
1、定义:在变量输出时对变量的值进行处理
2、作用:可以通过使用过滤器来改变变量的输出显示
3、语法:{{变量|过滤器1:'参数值1' | 过滤器2:'参数值2'......}}

1、常用过滤器

过滤器说明lower将字符串转换为全部小写upper将字符串转换为大写形式safe默认不对变量内的字符串进行html转义add:“n”将value 值增加ntruncatechars:“n”如果字符串字符多于指定的字符数量,那么会被截断,截断的字符串将以可翻译的省略号序列(”…“)结尾

2、举例:JS代码起作用
1)、views.py里定义script 为JS代码

2)、test_html.html 文件调用script时不加safe,JS代码被转义

3)、加safe后,JS代码可以正常执行


:引起思考:是不是有可能可以构造XSS攻击,暂时还没想明白,,,

六、模板的继承
模板继承可以使父模板的内容重用,子模板直接继承父模板的全部内容并可以覆盖父模板中相应的块
语法-父模板中:
1、定义父模板中的block标签
2、标识出哪些在子模块中是允许被修改的
3、block标签:在父模板中定义,可以在子模板中覆盖

语法-子模板中:
1、继承模板 extends 标签(写在模板文件的第一行)
{%extends ’base.html‘%}
2、子模板重写父模板中的内容块
{% block block_name %}
子模板块中用来覆盖父模板中 block_name 块的内容
{% endblock block_name %}

重写的覆盖规则:
1、不重写,将按照父模板的效果显示
2、重写,则按照重写效果显示
:模板继承时,服务器端的动态内容无法继承

举例:MUSIC继承HOME


七、url反向解析
url反向解析是指在视图或模板中,用path定义的名称来动态查找或计算出相应的路由
path函数的语法:
1、path(route,views,name=”别名“)
2、path(’page‘,views.page_view,name=”page_url“)
根据path中的”name=“关键字传参给url确定了个唯一确定的名字,在模板或视图中,可以通过这个名字反向推断出此url信息

模板中——通过url标签实现地址的反向解析
{% url '别名' %}
{% url '别名' '参数值1' '参数值2' %}
例如:
{% url 'pagen' '400' %}
{% url 'person' age='18' name='gxn' %}

在视图函数中——可调用django中的reverse方法进行反向解析
from django.urls import reverse
reverse('别名',args=[],kwargs={})
例如:
print(reverse('person',kwargs={'name':'xixi','age':18}))

1、在模板中引用

:这里当test_url_result页面对应的url变了也照样能解析得到,因为这里传入的是别名

2、在视图函数中引用

:这里是做一个302重定向,当点击test_url_result时,重定向到base.html页面,base.html页面通过reverse来重定向

八、模板中访问静态文件—— img标签为例
通过{% static %}标签访问静态文件
1、加载static :{% load static %}
2、使用静态资源:{% static ’静态资源路径‘ %} (主要写出文件在static下哪个路径就好)
3、样例:

1、在mysite1文件夹下新建目录static,在setting.py 设置静态文件路径

2、模板文件下加载静态模块,引用图片位置

3、图片加载后,可以看到路径跟一般相对路径一致

九、django应用

1、创建应用

1、用manage.py 中的子命令 startapp 创建应用文件夹
python3 manage.py startapp music

2、在setting.py 的INSTALLED_APPS 列表中配置安装此应用


十、django分布式路由

Django中,主路由配置文件(urls.py)可以不处理用户具体路由,主路由配置文件的可以做请求的分发(分布式请求处理)。具体的请求可以由各自的应用来进行处理

1、主路由中调用include函数

语法:include(’app名字.url模块名‘)
作用:用于将当前路由转到各个应用的路由配置文件的urlpatterns进行分布式处理


2、应用下配置urls.py

应用下手动创建urls.py文件,内容结构同主路由完全一样


3、在views.py 定义函数index_view即可

十一、应用下的模板
应用内部可以配置模板目录
1、应用下手动创建templates文件夹
2、settings.py 中开启应用模板功能
	TEMPLATE 配置项中的”APP_DIRS“值为 True即可

应用下templates 和外层templates 都存在时,django得查找模板规则
1、优先查找外层templates目录下的模板
2、按INSTALLED_APPS配置下的应用顺序逐层查找
:使用同名文件时,可以在对应的app的templates文件夹下新建与该app同名的文件夹,然后再创建该同名网页,此时views函数需修改
return render(request,'news/test_url_result.html')

1、mysite1主目录下的templates 目录有 test_url_result.html 页面

2、music 目录下的templates下有test_url_result.html 页面

3、访问 http://127.0.0.1/music/index 仍然会显示外层的test_url_result.html 页面

django学习笔记二就记到这里啦,知识点好多,要好好学习呀~

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5443187.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存