• [django]用requests从url获取图片(数据类型是bytes)后如何在template中显示出来


    今天在做一个注册页面的时候遇到了一个验证码图片在页面显示的问题。

    我用requests从一个url上获取到一张图片, 没有保存到本地, 而是想直接作为render的字典参数,传到页面里进行渲染。因为requests.get(url)得到的response.content是bytes, 无法像jpg等本地图片文件直接加到<img src="">中,

    我的代码是这样的:

     1 def get_captcha(request):
     2     CAPTCHA_URL = "http://jw.qdu.edu.cn/academic/getCaptcha.do"
     3     session = requests.session()
     4     image = session.get(CAPTCHA_URL)
     5     request.session['JSESSIONID'] = session.cookies['JSESSIONID']
     6     print type(image.content)
     7     return image.content
     8 
     9 def register(request):
    10     if request.method == "GET":
    11         captcha = get_captcha(request)
    12         return render(request, 'student/register.html', {'captcha': captcha})

    Html代码是这样的register.html

    1 <input type="captcha" id="captcha" name="captcha" placeholder="请输入验证码">
    2 <img src="{{ captcha }}" />

    百思不得其解,上网也没有查阅到相关的信息。

    最后求助了django方面很牛逼的一个学长, 他告诉我要对response.content进行base64编码, 然后就可以渲染到页面上去。加入了base64编码之后,可是图片依然显示不出来

    1 def register(request):
    2     if request.method == "GET":
    3         captcha = get_captcha(request)
    4         captcha = b64encode(captcha)
    5         return render(request, 'student/register.html', {'captcha': captcha})

    想到是否是在html页面中的代码不对, 之后在网上查阅信息才得知, 经过base64编码的图片在html的<img>标签显示时,需要添加一些属性,即下面的data:image/jpeg;base64。 感谢博文:在浏览器中使用Base64编码的图像

    1 <input type="captcha" id="captcha" name="captcha" placeholder="请输入验证码">
    2 <img src="data:image/jpeg;base64,{{ captcha }}" />

     终于可以显示了。

  • 相关阅读:
    yii2 页面渲染方法解析
    JavaScript 编码小技巧
    Ansible Playbooks入门介绍
    CentOS 7 源码安装Ansible 2.x
    GitLab 安装与入门
    SpringBoot 悲观锁 与 乐观锁
    SpringBoot 事务隔离性和传播性
    SpringBoot 定义通过字段验证
    SpringBoot 密码MD5加密
    SpringBoot MockMVC
  • 原文地址:https://www.cnblogs.com/KarryWang/p/3806259.html
Copyright © 2020-2023  润新知