Django上傳文件最簡(jiǎn)單最官方的方法
1.配置media路徑
在settings.py中添加如下代碼:
1
|
MEDIA_ROOT = os.path.join(BASE_DIR, 'media' ) |
2.定義數(shù)據(jù)表
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import os from django.db import models from django.utils.timezone import now as timezone_now def upload_to(instance, filename): now = timezone_now() base, ext = os.path.splitext(filename) ext = ext.lower() return f 'quotes/{now:%Y/%m/%Y%m%d%H%M%S}{ext}' class Quote(models.Model): class Meta: verbose_name = 'quote' verbose_name_plural = verbose_name author = models.CharField( 'author' , max_length = 200 ) quote = models.TextField( 'quote' ) picture = models.ImageField( 'picture' , upload_to = upload_to, blank = True , null = True ) def __str__( self ): return self .quote |
這里的upload_to函數(shù)會(huì)自動(dòng)把文件的名稱修改為日期型的名稱,不會(huì)重名。
3.添加form表單
forms.py文件
1
2
3
4
5
6
|
from django import forms from .models import Quote class QuoteForm(forms.ModelForm): class Meta: model = Quote fields = '__all__' |
4.編寫視圖代碼
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
from django.shortcuts import render, redirect from .forms import QuoteForm def add_quote(request): form = QuoteForm() if request.method = = 'POST' : form = QuoteForm( data = request.POST, files = request.FILES ) if form.is_valid(): form.save() return redirect( 'quote:add_quote' ) else : return render(request, 'quotes/add_quote.html' , { 'form' : form }) |
5.編寫模板html代碼
1
2
3
4
5
|
<form action = "{% url 'quote:add_quote' %}" method = "post" enctype = "multipart/form-data" > { % csrf_token % } {{ form.as_p }} <button type = "submit" >save< / button> < / form> |
6.添加url映射
1
2
3
4
5
6
7
|
在app的目錄的urls.py添加 from django.urls import path from quotes.views import add_quote app_name = 'quote' urlpatterns = [ path( 'add/' , add_quote, name = 'add_quote' ) ] |
在項(xiàng)目目錄的urls.py文件添加
1
2
3
4
|
from django.urls import path, include urlpatterns = [ path( 'quotes/' , include( 'quotes.urls' , namespace = 'quote' )) ] |
效果圖
知識(shí)點(diǎn)擴(kuò)展:
最簡(jiǎn)單的文件下載功能的實(shí)現(xiàn)
將文件流放入HttpResponse對(duì)象即可,如
1
2
3
4
5
|
def file_download(request): # do something... with open ( 'file_name.txt' ) as f: c = f.read() return HttpResponse(c) |
到此這篇關(guān)于python中Django文件上傳方法詳解的文章就介紹到這了,更多相關(guān)Django文件上傳方法內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!
原文鏈接:https://www.py.cn/kuangjia/django/10803.html