Django学习第4天

模板里标签常用的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

过滤器:作用 在变量显示前 对变量进行修改,然后显示出来,原来的变量并不改变。
在这里插入图片描述
list|join:"#" 如果list是一个列表,那么显示出来的,是一行字串,并且列表的每个元素以# 相隔
在这里插入图片描述
上面所有变量后面 跟着|的 都是过滤器,目的是在变量显示前,对变量进行一定的修改或者修饰

还可以过滤时间变量,让时间以某种格式来显示,可以使用
{{ mytime | date:“Y - M - D” }}

下面是算术过滤方法
在这里插入图片描述
在这里插入图片描述

反向解析
在这里插入图片描述
模板的继承,其实就是有的模板部分不必重复的写,只需要继承过来就可以了,比如很多网站的,头部和底部都是一样的,我们只需要把这个作为父模板,其他的模板继承过来就可以了,不必每一个页面都要写一遍
在这里插入图片描述
在这里插入图片描述
HTML转义:从视图那边传到模板一些字符串,字符串里面含有html标签,想让模板那边让这些html标签有作用,就要使用这些转义,

在这里插入图片描述
如果直接在模板端取出来,<h1>只是字符串,想让他们变成html标签呢?就需要通过过滤器,来实现html转义
在这里插入图片描述
CSRF 是为了防止提交表单时候,恶意攻击服务器。不停地提交表单,增加服务器的压力
在这里插入图片描述
在这里插入图片描述
除了上面不停提交表单来增加压力外,还有可以设置验证码来防止恶意攻击,django里面验证码的实现方式!

验证码是图片,程序很难破解,那么我们就先用视图函数生成一个图片验证码,并且在服务器session里面保留这次生成的验证码的数值,方便和客户端进行比较

1.视图函数实现生成图片验证码

def verify_code(request):
    #引入随机函数模块
    import random
    #定义变量,用于画面的背景色、宽、高
    bgcolor = (random.randrange(20, 100), random.randrange(
        20, 100), 255)
    width = 100
    height = 25
    #创建画面对象
    im = Image.new('RGB', (width, height), bgcolor)
    #创建画笔对象
    draw = ImageDraw.Draw(im)
    #调用画笔的point()函数绘制噪点
    for i in range(0, 100):
        xy = (random.randrange(0, width), random.randrange(0, height))
        fill = (random.randrange(0, 255), 255, random.randrange(0, 255))
        draw.point(xy, fill=fill)
    #定义验证码的备选值
    str1 = 'ABCD123EFGHIJK456LMNOPQRS789TUVWXYZ0'
    #随机选取4个值作为验证码
    rand_str = ''
    for i in range(0, 4):
        rand_str += str1[random.randrange(0, len(str1))]
    #构造字体对象,ubuntu的字体路径为“/usr/share/fonts/truetype/freefont”
    font = ImageFont.truetype('FreeMono.ttf', 23)
    #构造字体颜色
    fontcolor = (255, random.randrange(0, 255), random.randrange(0, 255))
    #绘制4个字
    draw.text((5, 2), rand_str[0], font=font, fill=fontcolor)
    draw.text((25, 2), rand_str[1], font=font, fill=fontcolor)
    draw.text((50, 2), rand_str[2], font=font, fill=fontcolor)
    draw.text((75, 2), rand_str[3], font=font, fill=fontcolor)
    #释放画笔
    del draw
    #存入session,用于做进一步验证
    request.session['verifycode'] = rand_str
    """
    python2的为
    # 内存文件操作
    import cStringIO
    buf = cStringIO.StringIO()
    """
    # 内存文件操作-->此方法为python3的
    import io
    buf = io.BytesIO()
    #将图片保存在内存中,文件类型为png
    im.save(buf, 'png')
    #将内存中的图片数据返回给客户端,MIME类型为图片png
    return HttpResponse(buf.getvalue(), 'image/png')

request.session['verifycode'] = rand_str 这一步是把这次生成的验证码放入服务器的session中,为了方便验证时候拿来对比

2,上面是在视图函数里面写的代码,视图函数会给我们返回一个验证码图片,配置路径,通过哪一个路径可以找到这个验证码视图函数
在这里插入图片描述

3,在模板里,如何接收生成的验证码图片呢?
在这里插入图片描述
4,配置验证提交表单数据的路径
在这里插入图片描述
5,编写验证表单数据的视图函数
在这里插入图片描述
6.如果,我们输入的验证码是错误的,就会重新返回到登录页面,在验证码后面提示,验证码错位,可以在模板里面添加如下代码
在这里插入图片描述
然后,还是修改我们的验证的视图函数
在这里插入图片描述
那么如果看不清验证码,点击一下图片,让它重新生成呢?可以在模板端用jq来实现
在这里插入图片描述
模板端,代码如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>show_verify</title>
    <script src="/static/js/jquery-1.12.4.min.js"></script>
    <script>
        $(function () {
            // 添加点击事件 鼠标浮动时变成小手
            $('#sp').css('cursor', 'pointer').click(function () {
                // 获取到图片的src路径  换一个新的路径   此代码相当与在原来的基础上增加数据
                $('#yzm').attr('src', $("#yzm").attr('src')+'?1')
            })
        })
    </script>
</head>
<body>
<form action="/verify_check2/" method="post">
    {% csrf_token %}
    请输入验证码:<input type="text" name="verify"><br>
    <img src="/verify_code/" alt="" id="yzm"><span id="sp">看不清,换一张</span><br>
    <input type="submit" value="提交">
</form>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/steve1988717/article/details/86633696