djano框架和要点6.模板

django自带模板

例1:

模板文件

1.在templates目录中新建一个模板文件,如index.html

Title {​{ num }}
{{ msg }}
{{ person }}
{{ hobby }}
{{ person.name }}--{{ person.age }}
{{ hobby.0 }}--{{ hobby.1 }}

模板数据

2.Django提供了一个函数render实现模板渲染
render(request, 模板文件路径, 模板数据字典)

def index27(request):
    context={
        'num':1,
        'msg':'hello',
        'person':{
            'name':'tom',
            'age':20
        },
        'hobby':['a','b']
    }
    return render(request,'index1.html',context)

例2:

带有循环功能的模板:

def index28(request):
    	context={
       		 'hobby':['a','b'],
       		 'score':{'1':'2','3':'4'}
   		 }
   	 return render(request,'index2.html',context)
<body>
{{hobby}}
{%for item in hobby%}
{{item}}
<ul>
{{score}}
{%for item in score%}
<li>{{item}}</li>
</ul>

</body>

or循环
{%for item in 列表%}
循环逻辑
{{forloop.counter}}表示当前是第几次循环,从1开始
{%empty%}列表为空或不存在时执行此逻辑
{%endfor%}
2.if条件:
{%if…%}
逻辑1
{%elif…%}
逻辑2
{%else…%}
逻辑3
{%endif%}

比较运算符
= =
!=
<

<=

=
布尔运算符
and
or
not
注意:运算符左右两侧不能紧挨着变量或常量,必须有空格

例3:过滤器

1.语法:
使用管道符号|来应用过滤器,用于进行计算,转换操作,可以使用在变量,标签中
如果过滤器需要使用参数,用冒号,传递参数
2.列举自带过滤器的几个:
safe,禁用转意,告诉模板这个变量是安全的可以解释执行
length:长度,返回字符串包含字符的个数,或列表,元组字典的元素个数
default:默认值,如果变量不存在则返回默认值
date|default:‘默认值’

def index(request):
	context={
	'name':'Tom max',
	'html':'<h1>haha</h1>,
	'hobby':['a','b'],
	'score':{'1','2','3'}}
return render(request,'index.html',context)
<body>
{{name}}
{{name|length}}
{{name|title}}
{{html}}
{{html|safe}}
{{hobby}}
{{hobby|length}}
{{key}}
{{key|default:'0'}}
{{score}}
{{score|length}}
</body>

带有管道过滤器功能的模板

模板的继承

父模板:
{%block 名称%}
{{ }}
{%endblock 名称%}

子模板:
标签entends:继承,写在子模板文件第一行
{%extends 父模板路径%}
子模板不用填充父模板中所有预留区域,如果子模板没有填充,则使用父模板定义的默认值
填充父模板中指定名称的预留区域
{%block 名称%}
实际填充内容
{{block.super}}用于获取父模板中的block内容
{%endblock名称%}

jinja模板

第一步:在虚拟环境中安装
pip install jinja2

第二步:创建jinja_env文件
创建环境
from jinja2 import Environment
def environment(**options):
env=Environment(**options)
return env

第三步:在setting中配置jinja2
与django自导模板格式类似:
不同在于显示第几个时,

django是{{forloop}},jinja2是{{loop.index}}
{{变量}}
<ul>
{%for item in biaoge%}
<li>{{loop.index}}个数据是{{item}}</li>
{%endfor%}
</ul>

jinja2自定义过滤器

在jinja_env文件中写:
from jinja2 import Environment
	def environment(**options):
 		env=Environment(**options)
 		将自定义过滤器加到环境中,第一个参数是html中过滤器名,第二个是自定义的过滤器名
 		env.filters['revlist']=reverselist
                return env
自定义过滤器:                
def  reverselist(clist):
	clist.reverse()
	return clist
视图函数:
def index(request):
	context={'hobby':['a','b','c']}
	return render(request,'html',context)	
html文件:
{{context}}
{{context|revlist}}	

CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造
csrf攻击指攻击者盗用你的身份以你的名义发送恶意请求

csrf攻击示意图

客户端访问服务器时没有同服务器做安全验证
CSRF

防止CSRF攻击

1.在客户端向后端发送请求界面时,后端回往响应中的COOKIE中设置csrf_token值
2.在form表单中添加一个隐藏字段,值也是csrf_token
3.在用户点击提交的时候,会带上这两个值向后台发起请求CSRF防护
4.后端接受请求会
从cookie中取出csrf_token
从表单数据中取出隐藏的csrf_token值
进行比对
5.如果二者相同就是正常请求,如果不同或没有取到,代表不是正常请求

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值