Dayday up ---- python Day21
Django Templates
模板 html
extends 特点: 一个html只能继承一个模板,多个html有相同的地方
例子:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>{% block title %}{% endblock %}</title> {# <link rel="stylesheet" href="/static/commons.css">#} {% block css %}{% endblock %} </head> <body> <div>后台管理</div> {% block content %}{% endblock %} </body> </html>
{% extends 'master.html' %} {% block title %}exp1{% endblock %} {% block css %}<link rel="stylesheet" href="/static/commons.css">{% endblock %} {% block content %} <h1>EXP1</h1> {% endblock %}
include 特点 一个html里面有多个相同的地方
例子:
<div> 您好~~~ </div>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% include 'tag.html' %} {% include 'tag.html' %} {% include 'tag.html' %} </body> </html>
自定义函数:
simple_tag 不能作为if条件,但是可以参数任意
第一步:
在app01 下创建目录名 : templatetags
任意py文件
创建template对象 , register
# --*--coding:utf-8--*--
from django import template
from django.utils.safestring import mark_safe
register = template.Library()
@register.simple_tag
def test_sum(a1,a2):
return a1+a2
第二步:
在settings.py 文件注册app INSTALLED_APPS中添加app
第三步:
想在哪个html文件里面使用就在html文件顶部 {% load test_ex%}
第四步:
使用{% 函数名 arg1 arg2 %} simple tag 中空格无所谓,没有关系
{% load test_ex %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% test_sum 5 6 %}
</body>
</html>
simple_filter 可以放到if里面作为条件,但有参数限制,只能传两个,而且不能有空格
第一步:
app 下创建templatetags 目录
第二步:
任意py 文件
第三步:
创建template对象 register
第四步:
@register.filter
def filter_func(a1,a2):
seq = a1,a2
a = ''.join(seq)
return a
第五步: settings中注册app
第六步: 在html顶部 {% load xx.py %}
第七步: 使用 {{ 参数1| 函数名:"参数二" }} 或者 {{ 参数1|函数名:数字}}
cookie 和 session装饰器
cookie 是客户端浏览器上的一个文件
服务端获取cookie
request.COOKIES
request.COOKIES['username']
request.COOKIES.get('username')
def login(request): if request.method == "GET": return render(request,'login.html') elif request.method == "POST": u = request.POST.get('username') p = request.POST.get('pwd') dic = user_info.get(u) if not dic: return render(request,'login.html') if dic['pwd'] == p: res = redirect('/index.html') res.set_cookie('username_c',u,max_age=10) # 设置cookie,关闭浏览器就失效,max_age=10 设置cookie失效时间为10s res.set_cookie('user_type',"aaaa",httponly=True) return res else: return redirect('/login.html') return render(request, 'login.html') def auth(func): def inner(request,*args,**kwargs): v = request.COOKIES.get('username_c') # 获取cookie if not v: return redirect('/login.html') return func(request,*args,**kwargs) return inner @auth def index(request): v = request.COOKIES.get('username_c') return render(request,'index.html',{'current_user': v})
到某个时间点到期
import datetime
current_date = datetime.datetime.utcnow()
current_date=current_date+datetime.timedelta(seconds=5)
res.set_cookie('username_c', u, expires=current_date) # 设置cookie,截至时间失效
设置cookie
rep = HttpResponse(...) 或 rep = render(request, ...)
rep.set_cookie(key,value,...)
rep.set_signed_cookie(key,value,salt='加密盐',...)
参数:
key, 键
value='', 值
max_age=None, 超时时间
expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)
path='/', Cookie生效的路径,/ 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问
domain=None, Cookie生效的域名
secure=False, https传输
httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)
加密 cookie
obj.set_signed_cookie('username','vvvv',salt="aaa") 加密
解密 cookie
request.get_signed_cookie('username',salt="aaa")

浙公网安备 33010602011771号