python---django中模板渲染(csrf令牌使用,自定义模板函数)
使用终端,可以更方便的去实验,但是没有提示信息:
在项目目录下:
D:\MyPython\day23\HelloWorld>python manage.py shell
开始实验:
>>> from django.template import Context,Template
>>> t=Template("hello{{name}}")
>>> c=Context({"name":"lad"})
>>> t.render(c)
结果为
u'hellolad'
其内部实现大概如此。将模板文件读取,和传入的content字典进行渲染,然后使用HttpResponse
将内容返回给用户。
使用HTTPResponse实现:
from django.shortcuts import render,HttpResponse
from django.template.loader import get_template
from django.template import Context,Template
import datetime def cur_time(req):
t=get_template("cur_time.html")
curtime = datetime.datetime.now()
c=Context({'ctime':curtime})
html = t.render(c)
return HttpResponse(html)
模板语言的使用:
1.{{ 变量名 }}
若是函数没有传递该变量,也不会报错,只是认为不存在,为空
可以使用default模板函数:
{{ name|default:"没有" }}
2.对于列表,字典,对象等传参,可以使用万能' . '句点号来获取数据
{{ 列表.索引 }}
{{字典.键}}
{{对象.成员变量}}
3.调用模板语言自带函数,使用管道调用函数处理,使用冒号进行传参
{{ name|default:"空的" }}
{{ name|add:}}
{{ name|upper}}
{{ name|lower}}
{{ name|cut:' ' }}将name变量中的空格剔除
{{ val|date:'Y-m-d' }} # import datetime #val=datetime.datetime.now()将数据格式化输出
{{ 列表|first }}#或字典等
{{ 列表|length}}
.....
4.{% %}
for循环
{% for item in 字典 %}
{{ forloop.counter0 }}:{{item}}
{% endfor %}
if判断
{% if 条件 %}
......
{% elif 条件%}
......
{% else %}
......
{% endif %}
csrf令牌使用:(只会出现在表格传递中)
<form action="" method="post">
<input name="name" type="text"/>
<input name="age" type="text"/>
{% csrf_token %}
<input type="submit">
</form>
<form action="" method="post">
<input name="name" type="text"/>
<input name="age" type="text"/>
<input type='hidden' name='csrfmiddlewaretoken' value='pbBjEfV8sp10gsVZ3ymi5E8Mqbl8PIkf' />
<input type="submit">
</form>
此处注意对于render是可以直接使用csrf_token,成功生成令牌
但是对于render_to_response,需要进行处理context_instance,不然前端不会生成令牌
return render_to_response("post1.html",locals(),context_instance=RequestContext(request))
补充:ajax post使用令牌:
一种是form中包含令牌数据,我们$("#fm").serialize可以直接序列化数据传递即可
另外一种需要我们自己添加数据时,手动添令牌:简便方法:
$.ajax({
url:"",
data:{p:val,csrfmiddlewaretoken: '{{ csrf_token }}'},
type:"POST",
dataType:"json",
success:function(data){
alert("")
}
})
autoescape 输出原生代码,不是转义后的代码:
#value6='<a href="#">跳转</a>'
{{ value6 }}
{% autoescape off %}
{{ value6 }}
{% endautoescape %}
#若是不含autoescape,输出的只是字符串,不具有跳转功能,因为为了保证信息安全性,会默认自动将输出数据进行转义
或者使用:
{{ value6|safe }}
而在tornado中则是使用:
{% autoescape None %}
或者
在简单表达语句 {{ … }} 写成 {% raw …%}
url: {% url "ll" %}其中ll是别名
该函数在使用别名是用到
with: 使用更简单的变量名替换复杂变量名
{% with 简单 = 复杂 %}
{{ 简单 }}
{% with n = name %}
{{ n }}
.....
自定义模板标签(函数):
重点:在APP中目录下创建templatetags目录,放置自定义函数
目录:
blog APP目录
templatetags 目录存放自定义函数文件
my_func.py 文件
from django import template register = template.Library() #register的名字是固定的,不可改变 @register.simple_tag #装饰器
def my_add100(v1):
return v1+
调用:
{% load my_func %}
<h1>{% my_add100 %}</h1> #输出104
自定义filter(函数):
其他一致,只是改变了装饰器,调用方式也改变
@register.filter
def myadd101(v1,v2):
return v1+v2
<h1>{{ num|myadd101: }}</h1> #num会作为第一个参数
对于filter只可以插入一个其他参数,simple_tag可以插入多个参数,用空格隔开
但是在条件判断时:filter可以使用,
{% if num|myadd101: == %} #num=
<h1>filter ok</h1> #可以显示
{% endif %}
simple_tag不能,两者各有利弊
注意:在使用自定义模块函数后,需要重启项目
python---django中模板渲染(csrf令牌使用,自定义模板函数)的更多相关文章
- Python Django中QQ邮箱授权码问题
Python Django中QQ邮箱授权码问题 系统及软件版本如下: Ubuntu Kylin 16.04 Python 3.5.1 Django 1.9.7 PyCharm Community Ed ...
- RSA算法在Python Django中的简单应用
说明 RSA算法是当今使用最广泛,安全度最高的加密算法. • RSA算法的安全性理论基础 [引]根据百科介绍,对极大整数做因数分解的难度决定了RSA算法的可靠性.换言之,对一极大整数做因数分解愈困难, ...
- token、cookie和session区别以及django中的cookie,csrf
参考:https://my.oschina.net/xianggao/blog/395675?fromerr=GC9KVenE [前言]登录时需要post的表单信息. 先跳过具体案例,讲解基础知识: ...
- Python Django 中的STATIC_URL 设置和使用解析
使用Django静态设置时,遇到很多问题,经过艰苦的Baidu, stack overflow, Django原档阅读,终于把静态图片给搞出来了.特记录下来. 关键的概念:Django中,静态资源的存 ...
- python Django中的cookie和session
目录 Cookie 1.1获取Cookie 1.2设置Cookie Session 1.数据库Session 2.缓存Session 3.文件Session 4.缓存+数据库Session Cooki ...
- django “如何”系列4:如何编写自定义模板标签和过滤器
django的模板系统自带了一系列的内建标签和过滤器,一般情况下可以满足你的要求,如果觉得需更精准的模板标签或者过滤器,你可以自己编写模板标签和过滤器,然后使用{% load %}标签使用他们. 代码 ...
- [Python自学] day-21 (1) (请求信息、html模板继承与导入、自定义模板函数、自定义分页)
一.路由映射的参数 1.映射的一般使用 在app/urls.py中,我们定义URL与视图函数之间的映射: from django.contrib import admin from django.ur ...
- python django中使用sqlite3数据库 存储二进制数据ByteArray
在python中使用sqlite3数据库存储二进制流数据ByteArray,在django使用sqlite3数据库时,有时候也要注意最好使用二进制流ByteArray插入字符串. 使用ByteArra ...
- python django中的orm外键级联删除
今天添加了一个路由表,路由表做外键,然后添加了几个组,路由表为组的外键,当我使用删除功能对路由表进行删除时,竞然将我的组也相当的删除了:尽管这是测试,但放到生产环境中还是会发生意外的:这个问题要解决: ...
- Python Django中一些少用却很实用的orm查询方法
一.使用Q对象进行限制条件之间 "或" 连接查询 from django.db.models import Q from django.contrib.auth.models im ...
随机推荐
- Python 学习 第三篇:数组类型(列表、字典和元组)
列表和字段都可以在原处进行修改,可以按照需求增长或缩短,并且可以包含任何类型的对象或被嵌套.列表和字典存储的是对象的引用,而不是拷贝. 一,列表 列表是有序的序列,每一个列表项的顺序是固定的,这使得列 ...
- laraver框架学习
最近开始学习laravel框架,这个框架在国外很流行,近些年开始在国内流行.自己而是刚开始学习这个框架. 使用composer 更新系统内的依赖包 在终端输入:composer update Entr ...
- HTML 脚本 (Script) 实例
1.JavaScript 使 HTML 页面具有更强的动态和交互性.HTML script 元素<script> 标签用于定义客户端脚本,比如 JavaScript. script 元素既 ...
- manjaro安装软件
fcitx 安装以下包 fcitx-googlepinyin kcm-fcitx 安装了输入法之后,还要在/etc/profile或~/.xprofile里添加如下内容: export GTK_IM_ ...
- 网易云易盾朱星星:最容易被驳回的10大APP过检项
本文由 网易云发布. 1月20日,“走进网易:移动测试与安全实践”公开活动在杭州西湖区颐高创业大厦4F楼友会创业咖啡厅举行.本次活动的议题聚焦在如何实现应用的高效开发.安全过检.开发功耗降到最低等热 ...
- Beta阶段展示博客
Beta阶段展示博客 1. 团队成员的简介和个人博客地址 刘畅 博客园ID:森高Slontia 身份:PM 个人介绍: 弹丸粉 || 小说创作爱好者 || 撸猫狂魔(x || 生命的价值在于创造 (我 ...
- centos上部署mysql
本文记录整个安装的过程和跳进的坑,大家预祝我能从坑里爬出来吧 当前系统版本 开始我们的安装: 在安装之前查阅了部分资料,大体安装流程 yum -y install mysql yum -y insta ...
- 第一章:帝国的余晖 AT&T公司
启示:自己的想法,有好的技术比什么都重要,一定要注意的是技术,不要贪小便宜,明白自己最先关心的的哪个事情. 书中内容:没有人能活两百岁,也没有公司能辉煌两百年,这就是规律,很难超越.
- 软件工程学习之小学四则混合运算出题软件 Version 1.00 设计思路及感想
对于小学四则混合运算出题软件的设计,通过分析设计要求,我觉得为了这个软件在今后便于功能上的扩充,可以利用上学期所学习的<编译原理>一课中的LL1语法分析及制导翻译的算法来实现.这样做的好处 ...
- JavaBeans与内省(Introspector)
JavaBean与Introspector 反射和内省操作很多时候都是在以后要做框架的时候作用非常大. 现在你学的是面向对象编程,即:你所写代码都能够找到对应的类或接口,找到具体的方法写出对应的 ...