zoukankan      html  css  js  c++  java
  • (9)模板层

    django的模板语言:DTL

    模板语言的变量传入

    这个是标签 {{ 变量名 }}

    {{ 变量名 }}   #模板语言的替换可以在模板中的任意位置生效

    PS:通过 可以做深度查询

    模板语言的过滤器   #add就是一个过滤器

    { 变量名 | add:number}  #number就是数字,相当于把变量加数字,-number就是减法

    PS:模板中不支持变量的运算,所以用过滤器可以做到运算的效果

    python中的变量传入模板中

    模板语言的替换:把python中的变量替换到模板中的指定位置

    urls.py   #app下的

    from django.conf.urls import url,include  #include就是用来做路由分发的
    from django.contrib import admin


    from app01 import views
    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'index/',views.index)
    ]

    new_index.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>模板语言</title>
    </head>
    <body>
    {{ time }}
    </body>
    </html>

    views.py   #app下的views

    from django.shortcuts import render,HttpResponse,redirect,reverse
    import time

    def index(request):
    ctime = time.time()
    # 第三个参数是一个字典
    return render(request,'new_index.html',{'time':ctime})

    将多种python类型的数据传入模板中

    PS:原理就是python变量的名字是什么,在模板中直接用模板语言的格式{{ 变量名 }} 直接可以获取

    模板语言之变量的导入和处理

    views.py   #app下的

    from django.shortcuts import render,HttpResponse,redirect,reverse
    import time,datetime

    class Peroson():
    def __init__(self,name):
    self.name = name

    def index(request):
    ctime = time.time()

    dic = {'name':'lqz','age':19}

    li = [1,2,3,4,5]

    def test():
    return '我是个函数'

    lqz = Peroson('lqz')

    count = 10

    b = True

    counts = 1024

    # dat是一个时间类型的对象
    dat = datetime.datetime.now()

    # 格式化时间赋值给变量
    dates = dat.strftime('%Y-%m-%d')

    # 在视图内写html的一些标签样式等,要在页面中渲染出来得通过页html中的内置过滤器 safe来实现
    ss='<input type="text" name="name">'

    # locals() 会把该函数中所有的变量,构造成字典传到模板中
    return render(request,'new_index.html',locals())

    uels.py   #总路由

    from django.conf.urls import url,include  #include就是用来做路由分发的
    from django.contrib import admin


    from app01 import views
    urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'index/',views.index)
    ]

    new_index.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>模板语言</title>
    </head>
    <body>
    <input type="text" name="name">
    <h1>模板语言之变量的导入和处理</h1>
    <p>{{ ctime }}</p>
    <p>{{ li }}</p>
    <p>{{ dic }}</p>
    {#取出字典中的值,是用 . python中的是[]#}
    <p>{{ dic.name }}</p>
    <p>{{ dic.age }}</p>
    {#列表取值#}
    <p>{{ li.1 }}</p>
    {#也可以传入函数,但是不能加()#}
    <p>{{ test }}</p>
    {#传入一个对象#}
    <p>{{ lqz.name }}</p>
    {#add就是内置过滤器#}
    <p>{{ count | add:10 }}</p>
    {#default内置过滤器 就是当传入的变量是False的时候显示后面设定的字符,如果是True的时候就是显示True#}
    <p>{{ b | default:'当b是False的时候显示这个默认值' }}</p>
    {#length 内置过滤器,计算变量的长度#}
    <p>{{ dic | length }}</p>
    {#filesizeformat 内置过滤器,将变量的值根据长度自动进行一个单位换算,不同长度显示不同的单位,kbmb b#}
    <p>{{ counts | filesizeformat }}</p>
    {#date内置过滤器,将python中的时间对象变成自己设定的类型在页面中显示,date后面格式一定是一个字符串形式#}
    {#y对应年,m对应月,d对应日#}
    <p>{{ dat | date:'Y年-m月-d日 H:i:s' }}</p>
    {#在python中将时间处理成指定格式后返回,可以不用过滤器#}
    <p>{{ dates }}</p>
    {# safe 就是将视图中的变量值原封不动的在页面中显示 #}
    <p>{{ ss | safe }}</p>
    </body>
    </html>

    xss攻击

    就是前端的一种攻击方式,叫跨站脚本攻击,比如提交数据的时候提交了一个heml可执行的代码存入数据库,在提交的时候是以字符串形式,然后访问页面的时候从数据库内将这个字符串取出,由于是一串可执行代码,前端用safe处理后直接执行了代码,很有可能造成系统的奔溃或者严重的问题

    xss攻击简单模拟

    views.py

    from django.shortcuts import render,HttpResponse,redirect,reverse
    import time,datetime



    def index(request):
    # 变量的值是一个html可执行的语句
    ss="<script>alert('xss攻击')</script>"
    return render(request,'new_index.html',locals())

    index.html

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>模板语言</title>
    </head>
    <body>
    <h1>xss攻击模拟</h1>
    {#如果这里用safe将变量的值原封不动的传入,则会造成xss攻击#}
    <p>{{ ss | safe }}</p>
    </body>
    </html>

    PS:django中已经帮我们处理了xss攻击,只要不用safe,则永远是以字符的形式显示到页面中,只有我们觉得这个是安全的才用safe

  • 相关阅读:
    FineUI开源版(ASP.Net)初学手册-部分JS整理
    ASP.NET-FineUI开发实践-15
    ASP.NET-FineUI开发实践-14
    FineUI开源版(ASP.Net)开发实践-目录
    ASP.NET-FineUI开发实践-13(二)
    ASP.NET-FineUI开发实践-13(一)
    在VS.NET中根据条件设置不同的MainForm
    VB.NET在基类中定义共享事件(类似于C#中的静态事件)
    也谈解决Combobox绑定数据后取值出现System.Data.DataRowView的问题
    在SQL Server 2014下面使用的SQL2000的Northwind和Pubs示例数据库
  • 原文地址:https://www.cnblogs.com/shizhengquan/p/10490452.html
Copyright © 2011-2022 走看看