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
app01\templatetags\test_ex.py

      第二步:

        在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})
views.py

    到某个时间点到期  

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")

  

 

        

posted @ 2017-01-06 11:54  a_monologue  阅读(72)  评论(0)    收藏  举报