• [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 }}" />

     终于可以显示了。

  • 相关阅读:
    Linux操作篇之配置Samba
    Chrome扩展实现网页图片右键上传(以E站图片搜索为例)
    Linux开机自动挂载NFS配置的一个误区
    ffmpeg指令解读海康威视摄像头
    linux服务器性能调优之tcp/ip性能调优
    多线程程序设计中的8条简单原则
    初识文件系统
    socket中的listen到底干了哪些事情?
    ip面向无连接?TCP面向连接?HTTP连接方式?
    网络层和数据链层的区别
  • 原文地址:https://www.cnblogs.com/KarryWang/p/3806259.html
Copyright © 2020-2023  润新知