美文网首页
Django标签、转义及验证码生成

Django标签、转义及验证码生成

作者: 铅笔与旧友 | 来源:发表于2018-09-15 16:46 被阅读0次

一、模板

  • 组成
HTML代码
动态插入的代码(挖坑、填坑逻辑控制代码)
  • 作用
快速生成HTML页面
  • 优点
模板的设计实现了业务逻辑与现实内容的分离
视图可以使用任何模板
  • 模板处理
加载
渲染

二、模板使用

  • 变量
    - 从视图函数中传递到模板
    
    {{ var }}
    {{ 变量 }}

变量不存在,则插入空的字符串

  • 标签
逻辑处理
    
使用:
    {% tag %}
    
- 标签if
    {% if 条件 %}
        代码区块
    {% endif %}
     

    {% if 条件 %}
        代码区块1
    {% else %} 
        代码区块2
    {% endif %}
   
    
    {% if 条件 %}
        代码区块1
    {% elseif %} 
        代码区块2
    {% else %}
        代码区块3
    {% endif %}
  • 标签for - in
    {% for 变量 in 列表%}
        代码区块
    {% endfor %}
    
    #循环的当前次数(从1开始)
    {{ forloop.counter }}
    
    #循环的当前次数(从0开始)
    {{ forloop.counter0 }}
    
    #循环的当前次数(逆序显示)
    {{ forloop.revcounter }}
  • 单行注释
    {# 注释内容 #}

模板中的注释,如果HTML注释:\

  • 多行注释
    {% comment %}
        注释区块
    {% endcomment %}
  • 标签 ifequal 和 finotequal
    {{% ifequal 条件1 条件2%}}
        代码区块
    {{% endifequal %}}
    
    {{% ifnotequal 条件1 条件2%}}
        代码区块
    {{% endifnotequal %}}
  • 过滤器
    {{ var|过滤条件}}
    
    过滤条件:lower\upper\join:''\default:' '\...
  • 标签include
    加载模板(带参数渲染)
    {% include '模板位置' with 参数1 参数2 参数3..... %}
    
    exp:{% include 'index_context.html'%}

四、反向解析

  • 基本语法
    {% url 'namespace:name' p1 p2.....%}
    name: url添加一个别名(不同应用中,可能会出现重名)
    namespace:命名空间

五、模板继承

  • 作用

提高页面的代码复用(提取共有部分,作为基类)

  • block标签
-   挖坑和填坑的过程

    # 挖坑
    {% block 标签名%}
    {% endblock 标签名 %}
    
    # 填坑
    {% block 标签名%}
        代码区块
    {% endblock 标签名 %}

  • extends标签
  {% extends 'home.html' %}

六、HTML转义

    return render(request,'cart.html',content={'code':<h1>购物车</h1>})
    
    #默认会转义:当前普通字符串
        {{code}}
    #方式一:过滤
        {{ code|safe }}
        
    #方式二:关闭自定义转义
        {% autoescape off%}
            {{ code }}
        {% endautoescape %}

七、生成验证码

  • 导包
# 安装pillow : pip install pillow
from PIL import Image, ImageDraw, ImageFont
  • 实现代码
def verifycode(request):
    bgcolor = (random.randint(0,255)),random.randint(0,255),random.randint(0,255)
    width  = 100
    height = 50

    #创建图片
    image = Image.new('RGB',(width,height),bgcolor)

    #创建画笔对象
    draw = ImageDraw.Draw(image)

    # 绘制噪点
    for i in range(0,1000):
        xy =  (random.randrange(0,width),random.randrange(0,height))
        fill = random.randrange(0,255),random.randrange(0,255),random.randrange(0,255)
        draw.point(xy,fill=fill)

    # 定义验证码的备选值
    str = '1234567890QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm'

    # 随机选取四个值作为验证码
    rand_str = ''
    for i in range(0,4):
        rand_str += str[random.randrange(0,len(str))]

     #构建字体对象
    font =ImageFont.truetype('static/fonts/Songti.ttc',40)

    #构建字体颜色
    fontcolor1 = (255, random.randrange(0, 255), random.randrange(0, 255))
    fontcolor2 = (255, random.randrange(0, 255), random.randrange(0, 255))
    fontcolor3 = (255, random.randrange(0, 255), random.randrange(0, 255))
    fontcolor4 = (255, random.randrange(0, 255), random.randrange(0, 255))

    #绘制四个字
    draw.text((5,1),rand_str[0],font=font,fill=fontcolor1)
    draw.text((25,1),rand_str[1],font=font,fill=fontcolor2)
    draw.text((45,1),rand_str[2],font=font,fill=fontcolor3)
    draw.text((75,1),rand_str[3],font=font,fill=fontcolor4)

    # 释放画笔
    del draw
    
    # 存入session,用于验证
    request.session['verify'] = rand_str

    buff = io.BytesIO()
    image.save(buff,'png')

    return HttpResponse(buff.getvalue(),'image/png')

备注: code1 = request.session['verify'] 【登录获取图片上的验证码】 code2 = request.POST.get('verifycode') 【获取登录表单上输入的验证码】

相关文章

网友评论

      本文标题:Django标签、转义及验证码生成

      本文链接:https://www.haomeiwen.com/subject/bektnftx.html