[django]用requests從url擷取圖片(資料類型是bytes)後如何在template中顯示出來

來源:互聯網
上載者:User

標籤:style   class   blog   code   http   color   

今天在做一個註冊頁面的時候遇到了一個驗證碼圖片在頁面顯示的問題。

我用requests從一個url上擷取到一張圖片, 沒有儲存到本地, 而是想直接作為render的字典參數,傳到頁面裡進行渲染。因為requests.get(url)得到的response.content是bytes, 無法像jpg等本地圖片檔案直接加到<img src="">中,

My Code是這樣的:

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

 終於可以顯示了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.