一、settings配置文件中配置
MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'medias').replace('\\', '/')#media即為圖片上傳的根路徑
二、url路由中配置
from django.conf import settings from django.conf.urls.static import static from app01 import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/', views.index,name='index'), ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) #如果單純的是上傳,文件並不用來顯示或者讀取,就不用加這個
三、models.py文件中的寫法
這個表的img是存的是文件保存的路徑.
class Book(models.Model): name = models.CharField(max_length=32) date1 = models.DateTimeField(auto_now=True,null=True) date2 = models.DateTimeField(auto_now_add=True,null=True) img = models.ImageField(upload_to='img',null=True) #寫上upload_to,后面指定一個路徑,那么將來上傳的文件會直接生成到配置文件中的那個medias文件夾中的img文件夾中,不需要我們自己寫讀取文件內容寫入本地文件的操作,django內部幫我們自動處理了
四、views視圖函數中的寫法,上傳一個圖片:
from django.shortcuts import render,HttpResponse,redirect from app01 import models def index(request): if request.method == 'GET': return render(request,'index.html') else: username = request.POST.get('username') file_obj = request.FILES.get('file') print(file_obj) models.Book.objects.create( name = username, img = file_obj ) return render(request,'index.html')
五 在index.html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="{% url 'index' %}" enctype="multipart/form-data" method="post"> {% csrf_token %} <div>用戶名<input type="username" name="username"></div> <div>文件 <input type="file" name="file"></div> <div><input type="submit"></div> </form> </body> </html>
六通過頁面將上傳文件
七更新上傳了的文件(注意,只是會更新數據庫中那個字段保存的文件的路徑,但是之前上傳的文件是不會被自動刪除的,需要我們自行再寫邏輯來刪除之前上傳錯的或者需要被覆蓋的文件。還有就是如果上傳的文件名稱是相同的那么你會發現數據庫中這個字段的路徑后面的文件名稱會出現一個亂起八糟的隨機字符串,這是因為上傳的文件名稱沖突了,django為了解決這個沖突,給你改了一下你的文件名稱。)
obj = models.Book.objects.get(name='111') obj.img=file_obj obj.save() #下面的update方法是不能更新正確更新保存的文件路徑的,除非我們自己手動拼接文件路徑,然后img=路徑來進行update更新 models.Book.objects.filter(name='chao2').update(img=file_obj)
八 查看上傳的文件:
from django.shortcuts import render,HttpResponse,redirect from app01 import models def index(request): objs = models.Book.objects.all() return render(request,'index.html',{'objs':objs})
九 html文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div> {% for obj in objs %} <img src="/media/{{ obj.img }}" alt=""> {% endfor %} </div> </body> </html>
在一次訪問網頁可以看到圖片
上傳同一個文件名的時候會出現文件名的亂碼,暫時不知道怎么解決,沒有寫,想起來寫吧
