模板使用

一、模板介绍

1,作为Web框架,Django提供了模板,可以很便利的动态生成HTML

2,模版系统致力于表达外观,而不是程序逻辑

3,模板的设计实现了业务逻辑(view)与显示内容(template)的分离,

二、模板引擎

在Django框架中,可以使用两种模板引擎,一种是 默认的Django模板引擎 ,还有一种叫做其他 ,
比如Jinja2模板引擎 ;

1,模版引擎的作用和优点
模版引擎作用 是将View视图中需要在前端HTML页面中展示的数据,通过模板引擎的语法规则,展示出来;

模版引擎优点 是将业务逻辑的Python代码和页面设计的HTML代码分离,使代码更干净整洁更容易维护,使Python程序员和HTML/CSS程序员分开协作,提高生产的效率,且将HTML代码分离出来,还能使其能够复用;

2,配置引擎
pip install jinja2

TEMPLATES = [
{
‘BACKEND’: ‘django.template.backends.jinja2.Jinja2’,
‘DIRS’: [os.path.join(BASE_DIR,‘templates’)],
‘APP_DIRS’: True,
‘OPTIONS’: {
‘context_processors’: [
‘django.template.context_processors.debug’,
‘django.template.context_processors.request’,
‘django.contrib.auth.context_processors.auth’,
‘django.contrib.messages.context_processors.messages’,
],
},
},
{
‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’,
‘DIRS’: [os.path.join(BASE_DIR,‘templates’)],
‘APP_DIRS’: True,
‘OPTIONS’: {
‘context_processors’: [
‘django.template.context_processors.debug’,
‘django.template.context_processors.request’,
‘django.contrib.auth.context_processors.auth’,
‘django.contrib.messages.context_processors.messages’,
],
},
},
]

模板语法

一、注释
注释后的内容在网页源文件中不可见
1,单行
{# msg #}

2,多行
{% comment %}
{% endcomment %}

ctrl+/ 产生的注释仍然被django模板显示

二、变量打印
{{变量名}}
假如没有给模板引擎传递响应的变量,那么该位置不显示任何数据

三、条件判断
{% if a == b %}
{% elif a > b %}
{% else %}
{% endif %}
变量逻辑判断必须以空格隔开

四、循环

{% for item in items %}
{% empty %} 假如循环的迭代对象没有元素,输入empty中内容
{% endfor %}

五、过滤器
{ { 变量|过滤器 }}
针对变量使用特定过滤器处理
{ { name|lower|upper|default:‘zzy’|join:"++"|length }}

六、转义
默认django中是把自动转义打开,如果需要关闭自动转义
1,块转义
{% autoescape off %}
{% endautoescape %}

2,变量转义
{{ var|safe }}

七、跨站请求伪造保护(在下文中见详细说明)
{% csrf_token %}

八、继承标签
{% extends ‘base.html’ %}

{% block content %}
子模板自定的内容
{% endblock %}


九、包含

{% include “footer.html” %}
把制定的模板内容添加到当前模板中

跨站请求伪造

csrf

全称Cross Site Request Forgery,跨站请求伪造
某些恶意网站上包含链接、表单按钮或者JavaScript,它们会利用登录过的用户在浏览器中的认证信息试图在你的网站上完成某些操作,这
就是跨站攻击

在django的模板中,提供了防止跨站攻击的方法

在settings.py中启用’django.middleware.csrf.CsrfViewMiddleware’中间件,此项在创建项目时,默认被启用

1,{ % csrf_token % }模板标签

2,如果某些视图不需要保护,可以使用装饰器csrf_exempt,模板中也不需要写标签,修改csrf2的视图如下

from django.views.decorators.csrf import csrf_exempt
@csrf_exempt

保护原理
加入标签后,可以查看源代码,发现多了如下代码

django的csrf不是完全的安全

保持状态

一、状态保持
http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态
实现状态保持的方式:在客户端或服务器端存储与会话有关的数据
状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据

存储方式包括cookie、session

使用cookie,所有数据存储在客户端,注意不要存储敏感信息
使用sesison方式,所有数据存储在服务器端,在客户端cookie中存储session_id
推荐使用session

二、使用Cookie
cookie是由服务器生成,存储在浏览器端的一小段文本信息。

cookie的特点:
以键值对方式进行存储。
通过浏览器访问一个网站时,会将浏览器存储的跟网站相关的所有cookie信息发送给该网站的服务器。
服务端获取请求所携带的cookie 可以使用 request.COOKIES
cookie是基于域名安全的。www.baidu.com www.tudou.com之间的cookie互不影响
cookie是有过期时间的,如果不指定,默认关闭浏览器之后cookie就会过期。

在响应中设置
res = HttpResponse()
res.set_cookie(key=“username”, value=“zzy”, expires=timezone.now()+timedelta(days=7))

在响应中清除
res.delete_cookie(key=“username”)

从请求中获取
name = request.COOKIES.get(“username”)


三、使用session
session存储在服务器端。

session的特点:
session是以键值对进行存储的。
session依赖于cookie。唯一的标识码sessionid保存在 cookie中。
session也是有过期时间,如果不指定,默认两周就会过期。

设置
request.session[“username”] = “zzy”
request.session.set_expiry(606024*7)

获取
request.session.get(“username”)

清除
request.session.flush()

四、session的存储

在settings.py文件中

项INSTALLED_APPS列表中添加:
‘django.contrib.sessions’,
项MIDDLEWARE_CLASSES列表中添加:
‘django.contrib.sessions.middleware.SessionMiddleware’,

可以使用settings.py的SESSION_ENGINE项指定

基于本地数据库
SESSION_ENGINE=‘django.contrib.sessions.backends.db’

基于缓存
SESSION_ENGINE=‘django.contrib.sessions.backends.cache’

缓存和数据库同时使用
SESSION_ENGINE=‘django.contrib.sessions.backends.cached_db’

基于数据库的太慢,基于缓存的容易丢失
那么最好使用基于redis的内存数据库最好

需要安装模块
pip install django-redis-sessions

修改settings中的配置,增加如下项
SESSION_ENGINE = ‘redis_sessions.session’
SESSION_REDIS_HOST = ‘localhost’
SESSION_REDIS_PORT = 6379
SESSION_REDIS_DB = 0
SESSION_REDIS_PASSWORD = ‘’
SESSION_REDIS_PREFIX = ‘session’

可以通过redis-cli查看

Django MVT详细说明(三)模板T相关推荐

  1. Django MVT详细说明(二)视图V

    一.项目路由 在settings中配置了项目路由 ROOT_URLCONF = 'demo1.urls' 在项目路由urlpatterns中通过include函数引入应用路由配置文件 url('boo ...

  2. Python 框架 之 Django MVT 下的 T 的 模板简单介绍和使用

    Python 框架 之 Django MVT 下的 T 的 模板简单介绍和使用 目录

  3. Django MVT模型详解

    MVT模型详解 ORM简介 使用MySql数据库 开发流程 使用数据库生成模型类 Model 定义模型 定义属性 字段类型 字段选项 关系 元选项 示例演示 测试数据 类的属性 管理器Manager ...

  4. linux时间后mvt,Django MVT架构

    Web框架中的一些概念 MVC 大部分开发语言中都有MVC框架 MVC框架的核心思想是:解耦 降低各功能模块之间的耦合性,方便变更,更容易重构代码,最大程度上实现代码的重用 m表示model模型,主要 ...

  5. <学习笔记>从零开始自学Python-之-web应用框架Django( 十)通用模板

    django相对于flask这种轻框架来说被称为全栈框架,因为它提供了相当多集成好的功能,比如前面讲了模板,其实Django提供了一些通用模板,它们可以让开发人员编写少量代码就能快速实现常见的数据视图 ...

  6. Django 生成PDF(三)——关于RML

    Django 生成PDF(三)--关于RML 接上文,本节讲述一下关于报表所需的RML标准.RML(Report  Market Language),即报表标记语言,其语法类似于HTML.XML语言. ...

  7. 整理服务器项目描述,项目详细实施方案-模板整理版.doc

    项目详细实施方案-模板整理版.doc 项目实施方案 编制说明 项目实施方案又称为项目执行方案,是指从项目的目标要求.工 作内容.方式方法及工作步骤等做出全面.具体而又明确安排的计划 文件,是项目能否顺 ...

  8. 软件项目测试报告怎么做?详细测试方案模板参考

    从一个软件项目立项到研发最后上线要经过很多环节,其中软件测试也是其中重要的环节之一,做软件项目测试就不可避免的牵涉到项目测试报告了.一份完整明确的软件项目测试报告能够帮助软件开发人员更好的完善产品质量 ...

  9. Django MVT 模型及其模块介绍

    概述 最近在学习 DJango 框架,作为一个完美主义者的终极框架.虽然前面有做过一个简单的案例--DJango框架快速入门,但是对于初学者来说,往往有一种盲人摸象的感觉,尤其是像我这样做嵌入式开发而 ...

最新文章

  1. XML篇---可配置化的取值方式[便于维护]
  2. geo数据差异分析_GeoDiver:GEO数据挖掘分析利器
  3. 数字三角形:顺推法(二维数组)
  4. C语言 | 结构体详解(C结构体)
  5. docker mysql sock_docker mysql安装
  6. 步步为营-11-ListT泛型的简单练习
  7. ORACLE复杂查询之连接查询
  8. shell语法中的test命令用法
  9. WinDbg常用命令For Kernel Debug
  10. linux运行级别0-6的各自含义(考试题答案系列)
  11. 关于软件逆向工程的一些不错博客
  12. 数字条纹投影系统中基于概率分布函数的灵活伽玛计算算法
  13. 【Ubuntu】成功在Ubuntu18.04安装搜狗拼音输入法(无中文乱码)
  14. 雷电模拟器android文件夹在哪,雷电安卓模拟器共享文件怎么用?电脑文件与模拟器互通图文教程...
  15. 11010011计算机二进制,11010011B二进制转换成十进制,八进制,十六进制是多少?
  16. FDA“长寿药”NMN被爆几毛一克,富豪被收天价智商税?
  17. 基于Unity3D的调用摄像头功能的实现
  18. 智能ABC拼音输入法你真的会用吗
  19. js对节点 属性的操作
  20. 面向对象程序设计php,php面向对象的程序设计

热门文章

  1. saf java_Android SAF实现外置SD卡的写入(JAVA层与JNI层hook)
  2. iOS10下视频播放黑屏,又是苹果的坑!
  3. 认识LTE(六): LTE中的信道特征以及信道估计技术
  4. Java字节码框架ASM简介
  5. QQ可以用十六进制登录哦
  6. 数据分析师该这样霸气回应“0.00008的转化也很好”的谬论
  7. 欧陆风云3实用修改代码
  8. MSYS2 瘦身小攻略
  9. 美元指数V型反转 98关口保卫战打响
  10. 腾讯云主体信息相关问题解答教程