django上傳圖片

来源:http://www.cnblogs.com/RoundGirl/archive/2016/04/15/5395658.html
-Advertisement-
Play Games

django修改頭像的功能... 1.在表單中加入enctype="multipart/form-data; 關於表單中enctype的介紹:http://www.w3school.com.cn/tags/att_form_enctype.asp 處理表單的視圖會在request中接受到上傳文件的數 ...


django修改頭像的功能...

1.在表單中加入enctype="multipart/form-data;

關於表單中enctype的介紹:http://www.w3school.com.cn/tags/att_form_enctype.asp

處理表單的視圖會在request中接受到上傳文件的數據。FILES是個字典,它包含每個FileField的鍵

(或者ImageField,FileField的子類)。這樣的話就可以用request.FILES['File']來存放表單中的這些數據了。 

註意request.FILES只有在請求方法為POST,並且發送請求的<form>擁有enctype="multipart/form-data屬性時,

才會包含數據。否則request.FILES為空

如下圖所示:

提交後顯示圖片信息:

如果不加enctype="multipart/form-data:得不到圖片信息,只有路徑

 

2.上傳圖片

由於model中photo欄位存儲的是路徑,所以首先要把圖片保存在圖片對應的文件夾下。

保存圖片中使用到了PIL庫,對圖片進行各種操作----參考資料:廖雪峰--PILPIL官方文檔

我使用的功能簡單,只是保存圖片而已。代碼:

photo=request.FILES['photo']

        if photo:
            phototime= request.user.username+str(time.time()).split('.')[0]
            photo_last=str(photo).split('.')[-1]
            photoname='photos/%s.%s'%(phototime,photo_last)

       img=Image.open(photo) img.save('media/'+photoname)

3.將圖片路徑更新到資料庫

調用update()方法即可。

註:update()方法對於任何結果集(QuerySet)均有效。通過get()方法的到的不是QuerySet,

所以,不可以update,另外get()方法達不到數據和返回條數大於1條的時候都會報錯。

print type( UserInfo.objects.get(id=userinfo_id)) ---> <class 'Account.models.UserInfo'>

print type( UserInfo.objects.filter(id=userinfo_id))----> <class 'django.db.models.query.QuerySet'>
相關代碼如下:
models.py
class UserInfo(models.Model):
    user=models.OneToOneField(User)   
    photo=models.ImageField(upload_to='photos',default='user1.jpg')
    def __unicode__(self):
        return self.user.username

 html代碼

<form action="/updateinfo" method="POST" enctype="multipart/form-data">

            <div class="updateImg">
            <img src="{{ account.photo.url }}" alt=""/> </div>           
            
            <input name="photo" type="file" id="exampleInputFile">             
            <button id="photo" class="btn btn-danger" type="submit">上傳頭像</button>

 views.py

def updateInfo(request):
    if request.method=='POST':
        photo=request.FILES['photo']

        if photo:
            phototime= request.user.username+str(time.time()).split('.')[0]
            photo_last=str(photo).split('.')[-1]
            photoname='photos/%s.%s'%(phototime,photo_last)
            img=Image.open(photo)
            img.save('media/'+photoname)

            count=UserInfo.objects.filter(user=request.user).update(
                photo=photoname
            )
            if count:
                # 設置一個session,然後跳轉到對應的頁面,此處簡易寫寫
                return HttpResponse('上傳成功')                 
            else:
                return HttpResponse('上傳失敗')

        return HttpResponse('圖片為空')

  

 

參考:http://bluecrystal.iteye.com/blog/233030

   http://python.usyiyi.cn/django/index.html

   廖雪峰--PIL

 

 

============如有錯誤歡迎指正,轉載請註明出處==============

  






您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、類載入過程 執行時機:編譯程式——>執行程式(JVM啟動、程式運行),類載入發生在程式運行期間 各個階段:分為載入階段、連接階段(驗證、準備、解析)、初始化、使用、卸載 執行順序:大體是按以上階段依次執行,但相互間有交叉 載入——>驗證(文件格式)——>繼續載入——>解析——>驗證(元數據、位元組 ...
  • PrettyTable is a simple Python library designed to make it quick and easy to represent tabular data in visually appealing ASCII tables. It was inspire... ...
  • 若有不正之處,請多多諒解並歡迎批評指正,不甚感激。請尊重作者勞動成果: 本文原創作者:pipi-changing 本文原創出處:http://www.cnblogs.com/pipi-changing/ 本文版權歸作者和博客園共有,未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接 ,否 ...
  • win下jdk7環境變數的配置: 單擊電腦(Computer),選擇屬性(Properties),選擇高級系統設置(Advanced systems settings), 選擇環境變數(Environment Variables). 新建3個環境變數(PATH,CLASSPATH,JAVA_HOM ...
  • ...
  • 題目: Given a binary tree, find its maximum depth. The maximum depth is the number of nodes along the longest path from the root node down to the farthe ...
  • 首先可以通過官網下載JDK:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html,至於下什麼版本根據你的喜好 下載好以後直接運行安裝包,一路繼續、確認 將包安裝完成之後,打開終端創建.bash_pr ...
  • 1.單例模式 寫日誌 介紹:保證類只有一個實例,並提供一個全局訪問點。 要點:構造函數設為私有,類內有一個靜態指針,靜態函數返回指針,lock()。或在類內有一靜態函數負責返回一靜態變數。 2.工廠模式 閱讀器。首先,需要將電子書中的內容渲染到屏幕上,而電子書每一頁都包含各種各樣的內容,比如:圖形、 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...