最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python 實現(xiàn)上傳圖片并預(yù)覽的3種方法(推薦)

 更新時間:2017年07月14日 07:59:51   投稿:jingxian  
下面小編就為大家?guī)硪黄猵ython 實現(xiàn)上傳圖片并預(yù)覽的3種方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在常見的用戶注冊頁面,需要用戶在本地選擇一張圖片作為頭像,并同時預(yù)覽。

常見的思路有兩種:一是將圖片上傳至服務(wù)器的臨時文件夾中,并返回該圖片的url,然后渲染在html頁面;另一種思路是,直接在本地內(nèi)存中預(yù)覽圖片,用戶確認(rèn)提交后再上傳至服務(wù)器保存。

這兩種方法各有利弊,方法一很明顯,浪費流量和服務(wù)器資源;方法二則加重了瀏覽器的負(fù)擔(dān),并且對瀏覽器的兼容性要求更高(在某些低版本中的IE瀏覽器不支持)。

以下是實現(xiàn)上述思路的方法:

1. 模板文件

test.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <div >
    <form action="">
      {% csrf_token %}
    <h3>用戶注冊</h3>
    <p>用戶名:<input type="text" name="userName"></p>
    <p>密碼:<input type="password" name="password"></p>
    <p>郵箱:<input type="text" name="email"></p>
      <input id="avatar" type="text" value="/static/images/sample.png" name="avatar" > {# 實際應(yīng)用中要將該input標(biāo)簽隱藏,display:none; #}
      <p><input type="submit" value="注冊"></p>
      </form>
    <div >
    <input id="avatarSlect" type="file" >
    <img id="avatarPreview" src="/static/images/sample.png" title="點擊更換圖片" >
      </div>
  </div>
</body>

<script src="/static/jquery-3.2.1.js"></script>
<script>
  $(function () {
      bindAvatar();
 });
  function bindAvatar() {
      if(window.URL.createObjectURL){
        bindAvatar3();
      }else if(window.FileReader){
        bindAvatar2();
      }else {
        bindAvatar1();
      }
 }

  /*Ajax上傳至后臺并返回圖片的url*/
  function bindAvatar1() {
    $("#avatarSlect").change(function () {
    var csrf = $("input[name='csrfmiddlewaretoken']").val();
    var formData=new FormData();
    formData.append("csrfmiddlewaretoken",csrf);
    formData.append('avatar', $("#avatarSlect")[0].files[0]);  /*獲取上傳的圖片對象*/
    $.ajax({
      url: '/upload_avatar/',
          type: 'POST',
          data: formData,
          contentType: false,
          processData: false,
          success: function (args) {
        console.log(args);  /*服務(wù)器端的圖片地址*/
              $("#avatarPreview").attr('src','/'+args);  /*預(yù)覽圖片*/
              $("#avatar").val('/'+args);  /*將服務(wù)端的圖片url賦值給form表單的隱藏input標(biāo)簽*/
     }
      })
 })
  }
  /*window.FileReader本地預(yù)覽*/
  function bindAvatar2() {
    console.log(2);
       $("#avatarSlect").change(function () {
           var obj=$("#avatarSlect")[0].files[0];
           var fr=new FileReader();
           fr.onload=function () {
               $("#avatarPreview").attr('src',this.result);
               console.log(this.result);
               $("#avatar").val(this.result);
      };
      fr.readAsDataURL(obj);
    })
 }
 /*window.URL.createObjectURL本地預(yù)覽*/
 function bindAvatar3() {
   console.log(3);
      $("#avatarSlect").change(function () {
          var obj=$("#avatarSlect")[0].files[0];
          var wuc=window.URL.createObjectURL(obj);
           $("#avatarPreview").attr('src',wuc);
           $("#avatar").val(wuc);
{#           $("#avatarUrl").load(function () {#}    /*當(dāng)圖片加載后釋放內(nèi)存空間,但在jQuery3.2.1中會報錯。瀏覽器關(guān)閉后也會自動釋放*/
{#               window.URL.revokeObjectURL(wuc);#}
{#      })#}
   })
 }

</script>
</html>

2. 視圖函數(shù)

upload_avatar.py

from django.shortcuts import render, HttpResponse


def test(request):
  return render(request, 'test.html')


def upload_avatar(request):
  file_obj = request.FILES.get('avatar')
  file_path = os.path.join('static/images', file_obj.name)
  with open(file_path, 'wb') as f:
    for chunk in file_obj.chunks():
      f.write(chunk)
  return HttpResponse(file_path)

3. 路由系統(tǒng)

urls.py

from django.conf.urls import url
from django.contrib import admin
from home import views as homeViews

urlpatterns = [
  url(r'^admin/', admin.site.urls),
  url(r'^upload_avatar/', homeViews.upload_avatar), # 上傳頭像
  url(r'^test/', homeViews.test), # 測試頁面
]

驗證效果:

選擇圖片前:

Ajax上傳圖片至服務(wù)器,并返回瀏覽器該圖片的url:

window.FileReader本地預(yù)覽,form表單提交:

window.URL.createObjectURL本地預(yù)覽,form表單提交:

以上這篇python 實現(xiàn)上傳圖片并預(yù)覽的3種方法(推薦)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • PyQt5中QButtonGroup的用法解析與案例分享

    PyQt5中QButtonGroup的用法解析與案例分享

    在PyQt5中,QButtonGroup是一個非常有用的類,它提供了一個抽象的按鈕容器,允許開發(fā)者將多個按鈕劃分為一個組,本教程將詳細(xì)介紹QButtonGroup的創(chuàng)建、使用、信號槽連接以及在實際項目中的應(yīng)用案例,需要的朋友可以參考下
    2024-08-08
  • 解決Python一行輸出不顯示的問題

    解決Python一行輸出不顯示的問題

    今天小編就為大家分享一篇解決Python一行輸出不顯示的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 使用python測試prometheus的實現(xiàn)

    使用python測試prometheus的實現(xiàn)

    本文主要介紹了使用python測試prometheus的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • python 列表,集合和字典的增刪改查

    python 列表,集合和字典的增刪改查

    這篇文章主要介紹了python 列表,集合和字典的增刪改查,本文分別對他們一一說明,小編覺得這篇文章寫的還不錯,需要的朋友可以參考下,希望能夠給你帶來幫助
    2021-10-10
  • Python實現(xiàn)查找二叉搜索樹第k大的節(jié)點功能示例

    Python實現(xiàn)查找二叉搜索樹第k大的節(jié)點功能示例

    這篇文章主要介紹了Python實現(xiàn)查找二叉搜索樹第k大的節(jié)點功能,結(jié)合實例形式分析了Python二叉搜索樹的定義、查找、遍歷等相關(guān)操作技巧,需要的朋友可以參考下
    2019-01-01
  • 使用Python構(gòu)建一個簡單的任務(wù)管理器

    使用Python構(gòu)建一個簡單的任務(wù)管理器

    在現(xiàn)代軟件開發(fā)中,任務(wù)管理是一個至關(guān)重要的功能,這篇文章主要為大家介紹了如何使用Python構(gòu)建一個簡單的任務(wù)管理器,有需要的可以參考下
    2024-11-11
  • python實現(xiàn)數(shù)字炸彈游戲

    python實現(xiàn)數(shù)字炸彈游戲

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)數(shù)字炸彈游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • request基本使用及各種請求方式參數(shù)的示例

    request基本使用及各種請求方式參數(shù)的示例

    這篇文章主要為大家介紹了request的基本使用及各種請求方式參數(shù)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • python實現(xiàn)飛行棋游戲

    python實現(xiàn)飛行棋游戲

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)飛行棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Python操作mongodb數(shù)據(jù)庫的方法詳解

    Python操作mongodb數(shù)據(jù)庫的方法詳解

    這篇文章主要介紹了Python操作mongodb數(shù)據(jù)庫的方法,結(jié)合實例形式詳細(xì)分析了Python下載、安裝pymongo及操作MongoDB數(shù)據(jù)庫相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-12-12

最新評論

长汀县| 陆河县| 兴海县| 拉萨市| 庆城县| 洛阳市| 营口市| 广丰县| 鲜城| 许昌县| 双辽市| 沂水县| 丹巴县| 岗巴县| 山西省| 普宁市| 大理市| 祁连县| 麟游县| 蓝田县| 沁水县| 铁岭市| 漳浦县| 遂昌县| 靖州| 辽宁省| 竹北市| 息烽县| 鄱阳县| 保德县| 日喀则市| 墨竹工卡县| 平度市| 海城市| 梓潼县| 雷州市| 红桥区| 苍山县| 惠来县| 昔阳县| 东至县|