Django-模板template

在项目目录,新建一个 template 文件夹。

setting

DIRSos.path.join(BASE_DIR, 'template') 或者 BASE_DIR / 'template'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
        },
    },
]

新建html

template 文件夹下,新建 html ,重点关注{{ }}

<body>
<ul>
    {% for book in books %}
        <li>{{ book.name }}</li>
    {% endfor %}
</ul>
</body>

view开发

在经过路由的设置后,在 view 里面通过 content 上下文来传递参数:

from book.models import BookInfo

# Create your views here

def bookList(request):
    books = BookInfo.objects.all()
    context = {
        "books": books
    }
    return render(request, "book.html", context=context)

结果

for循环

注释

{#在模板文件的注释写法#}
{% comment %}
多行注释
多行注释
{% endcomment %}

过滤器

语法如下:

  • 使用管道符号|来应用过滤器,用于进行计算、转换操作,可以使用在变量、标签中。
  • 如果过滤器需要参数,则使用冒号:传递参数。

列举几个如下:

  • safe,禁用转义,告诉模板这个变量是安全的,可以解释执行。
  • length,长度,返回字符串包含字符的个数,或列表、元组、字典的元素个数。
  • default,默认值,如果变量不存在时则返回默认值。
  • date,日期,用于对日期类型的值进行字符串格式化,常用的格式化字符如下:
    • Y表示年,格式为4位,y表示两位的年。
    • m表示月,格式为01,02,12等。
    • d表示日, 格式为01,02等。
    • j表示日,格式为1,2等。
    • H表示时,24进制,h表示12进制的时。
    • i表示分,为0-59。
    • s表示秒,为0-59。
    • value|date:"Y年m月j日  H时i分s秒"

模板继承

模板继承和类的继承含义是一样的,主要是为了提高代码重用,减轻开发人员的工作量。

父模板

如果发现在多个模板中某些内容相同,那就应该把这段内容定义到父模板中。

标签block:用于在父模板中预留区域,留给子模板填充差异性的内容,名字不能相同。

为了更好的可读性,建议给endblock标签写上名字,这个名字与对应的block名字相同。

父模板中也可以使用上下文中传递过来的数据。

子模板

标签extends:继承,写在子模板文件的第一行。

子模版不用填充父模版中的所有预留区域,如果子模版没有填充,则使用父模版定义的默认值。

填充父模板中指定名称的预留区域。

CSRF跨站请求伪造

攻击者盗用了你的身份,以你的名义发送恶意请求。比如:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账。

防止 CSRF 攻击

步骤
  1. 在客户端向后端请求界面数据的时候,后端会往响应中的 cookie 中设置 csrf_token 的值
  2. 在 Form 表单中添加一个隐藏的的字段,值也是 csrf_token
  3. 在用户点击提交的时候,会带上这两个值向后台发起请求
  4. 后端接受到请求,以会以下几件事件:
    • 从 cookie中取出 csrf_token
    • 从 表单数据中取出来隐藏的 csrf_token 的值
    • 进行对比
  5. 如果比较之后两值一样,那么代表是正常的请求,如果没取到或者比较不一样,代表不是正常的请求,不执行下一步操作\\
def get(self, request):
        # 生成csrf_token
        from django.middleware.csrf import get_token
        csrf_token = get_token(request)

        # 渲染转换页面,传入 csrf_token 到模板中
        response = render(request, 'transfer.html',context={'csrf_token':csrf_token})

        # 设置csrf_token到cookie中,用于提交校验
        response.set_cookie('csrf_token', csrf_token)

        return response

 

    版权声明:
    作者:hyzsj0106
    链接:https://www.cxywy.com/?p=703
    来源:程序员无垠
    文章版权归作者所有,未经允许请勿转载。

    THE END
    分享
    二维码
    打赏
    < <上一篇
    下一篇>>
    文章目录
    关闭
    目 录