python template模块_python_django_template模块

博文导航:

模板语言:Django 模板是一些文本字符串,作用是把文档的表现与数据区分开。模板定义一些占位符和基本的逻辑(模板标签),规定如何显示文档。通常,模板用于生成HTML(Django 模板也可以生成任何基于文本的格式)。

定义模板:

变量:

视图传递给模板的数据(注:变量名命名要遵守标识符命名规则)

语法:{{ var }}

变量用于对象的传递:

语法:{{ stu.name }}

变量用于调用对象的方法:

注:在模板中调用对象的方法不能传递参数!

举个栗子:

对应view.py文件

from . importmodelsdefindex(request):#调用对象

student = models.Students.stuObj.get(pk=1)#将对象传入模板中

return render(request,'myMain/index.html',{"num":3333, "stu": student})

我们在创建数据库的Students类中增加方法getName():

classStudents(models.Model):#......

defgetName(self): # 不能传递参数!!return self.name #返回数据库中的姓名

对应html模板

{{ num }}

{{ stu.name }}

{{ stu.getName}}

标签:在输出中创建文本,并进行控制逻辑和循环

语法:{% tag %}

if 语句语法:

{% if 表达式 %}

语句

{% endif %}

if-else语句:

{% if 表达式 %}

语句1

{% else %}

语句2

{% endif %}

if-elif语句:

{% if 表达式1 %}

语句1

{% elif 表达式2 %}

语句2

....

{% else %}

语句n

{% endif %}

ifequal、ifnotequal: 如果值相等、不相等

{% ifequal 值1 值2 %} #如果值1等于值2则执行语句

语句

{% endifequal %}

for循环语法:

1、

{% for 变量 in 列表 %}

语句

{% endfor %}

2、

{% for 变量 in 列表 %}

语句1

{% empty %} #列表为空或列表不存在时继承语句2

语句2

{% endfor %}

3、for循环的一个用法:

{{forloop.counter}} #用于for循环,表示当前是第几次循环

举个栗子:

对应html模板文件:

学生列表

  • {% for stu in students %}

{% if forloop.counter|divisibleby:2%} {# | 为过滤器,divisibleby:取余#}{{forloop.counter}}--{{ stu.name }}--{{stu.age}}{% else %}{{forloop.counter}}--{{ stu.name }}--{{stu.age}}{% endif %}

{% empty %}

目前没有学生信息{% endfor%}

对于的views.py文件:

from django.shortcuts import render

from . import models

def students(request):

list = models.Students.stuObj.all()

return render(request,'myMain/students.html',{'students':list})

显示结果:

include标签:加载模板以标签内的参数渲染

【格式:{% include '模板目录' 参数1 参数2... %}】

url标签:反向解析

csrf_token:

什么是csrf ?

跨站请求伪造(某些恶意网站利用 链接/表单/按钮/js,利用登陆用户在浏览器中认证,从而攻击用户服务)

举个例子:

csrf_token

{# {% csrf_token %} #} {#加上了这一句是为了让我们自己可以登录进去,为了效果,这里是暂时是被注释了的#}

姓名:


密码:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Web Python Template Injection 是一种常见的 Web 漏洞类型,通常缩写为 SSTI(Server Side Template Injection)。该漏洞是由于 Web 应用程序未正确处理用户输入导致的,攻击者可以通过构造恶意输入来执行任意代码或获取敏感信息。 Python 作为一种流行的 Web 开发语言,广泛应用于 Web 应用程序中。Python Web 框架(如 Flask、Django 等)通常使用模板引擎来生成动态内容。在模板引擎中,可以使用变量、表达式、条件语句、循环语句等功能来生成动态内容。然而,如果在模板引擎中直接使用用户输入作为变量或表达式的一部分,而没有对用户输入进行适当的验证和过滤,就可能导致模板注入漏洞。 例如,在 Flask 应用程序中,可以使用 Jinja2 模板引擎来生成动态内容。如果在模板中使用了用户输入的变量,攻击者可以构造恶意输入来执行任意代码。例如,以下代码中的 name 变量可能是用户输入的: ```python from flask import Flask, render_template, request app = Flask(__name__) @app.route('/') def index(): name = request.args.get('name', '') return render_template('index.html', name=name) if __name__ == '__main__': app.run(debug=True) ``` 在 index.html 中,可以使用 {{ name }} 来显示用户输入的 name 变量。如果攻击者在 name 中注入了模板代码,就可能导致模板注入漏洞。例如,攻击者可以构造如下的输入: ``` {{ ''.__class__.__mro__[1].__subclasses__()[414]('/etc/passwd').read() }} ``` 这段代码在模板引擎中会被解释为调用 Python 的 subprocess.Popen 函数执行命令 /etc/passwd,并读取其输出。攻击者可以通过这种方式执行任意代码,获取敏感信息或者直接控制服务器。 为了防止 SSTI 漏洞,开发人员应该对用户输入进行严格的验证和过滤,避免在模板引擎中直接使用用户输入作为变量或表达式的一部分。可以使用 Python 的安全模板引擎(如 jinja2-sandbox、jinja2-timeout 等)来限制模板执行的权限,或者使用模板引擎提供的安全过滤器(如 escape、safe 等)来过滤用户输入。此外,还应该及时更新 Web 应用程序和相关组件,以避免已知的漏洞攻击。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值