日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

上传文件和提交textfield_0基础掌握Django框架(37)文件上传

發(fā)布時(shí)間:2024/8/23 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 上传文件和提交textfield_0基础掌握Django框架(37)文件上传 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

為了更好的學(xué)習(xí)效果,請(qǐng)搭配視頻教程一起學(xué)習(xí):

Django零基礎(chǔ)到項(xiàng)目實(shí)戰(zhàn) - 網(wǎng)易云課堂?study.163.com

文件上傳:

文件上傳是網(wǎng)站開(kāi)發(fā)中非常常見(jiàn)的功能。這里詳細(xì)講述如何在Django中實(shí)現(xiàn)文件的上傳功能。

前端HTML代碼實(shí)現(xiàn):

  • 在前端中,我們需要填入一個(gè)form標(biāo)簽,然后在這個(gè)form標(biāo)簽中指定enctype="multipart/form-data",不然就不能上傳文件。
  • 在form標(biāo)簽中添加一個(gè)input標(biāo)簽,然后指定input標(biāo)簽的name,以及type="file"。
  • 以上兩步的示例代碼如下:

    <form action="" method="post" enctype="multipart/form-data"><input type="file" name="myfile"> </form>

    后端的代碼實(shí)現(xiàn):

    后端的主要工作是接收文件。然后存儲(chǔ)文件。接收文件的方式跟接收POST的方式是一樣的,只不過(guò)是通過(guò)FILES來(lái)實(shí)現(xiàn)。示例代碼如下:

    def save_file(file):with open('somefile.txt','wb') as fp:for chunk in file.chunks():fp.write(chunk)def index(request):if request.method == 'GET':form = MyForm()return render(request,'index.html',{'form':form})else:myfile = request.FILES.get('myfile')save_file(myfile)return HttpResponse('success')

    以上代碼通過(guò)request.FILES接收到文件后,再寫(xiě)入到指定的地方。這樣就可以完成一個(gè)文件的上傳功能了。

    使用模型來(lái)處理上傳的文件:

    在定義模型的時(shí)候,我們可以給存儲(chǔ)文件的字段指定為FileField,這個(gè)Field可以傳遞一個(gè)upload_to參數(shù),用來(lái)指定上傳上來(lái)的文件保存到哪里。比如我們讓他保存到項(xiàng)目的files文件夾下,那么示例代碼如下:

    # models.py class Article(models.Model):title = models.CharField(max_length=100)content = models.TextField()thumbnail = models.FileField(upload_to="files")# views.py def index(request):if request.method == 'GET':return render(request,'index.html')else:title = request.POST.get('title')content = request.POST.get('content')thumbnail = request.FILES.get('thumbnail')article = Article(title=title, content=content, thumbnail=thumbnail)article.save()return HttpResponse('success')

    調(diào)用完article.save()方法,就會(huì)把文件保存到files下面,并且會(huì)將這個(gè)文件的路徑存儲(chǔ)到數(shù)據(jù)庫(kù)中。

    指定MEDIA_ROOT和MEDIA_URL:

    以上我們是使用了upload_to來(lái)指定上傳的文件的目錄。我們也可以指定MEDIA_ROOT,就不需要在FielField中指定upload_to,他會(huì)自動(dòng)的將文件上傳到MEDIA_ROOT的目錄下。

    MEDIA_ROOT = os.path.join(BASE_DIR,'media') MEDIA_URL = '/media/'

    然后我們可以在urls.py中添加MEDIA_ROOT目錄下的訪問(wèn)路徑。示例代碼如下:

    from django.urls import path from front import views from django.conf.urls.static import static from django.conf import settingsurlpatterns = [path('', views.index), ] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

    如果我們同時(shí)指定MEDIA_ROOT和upload_to,那么會(huì)將文件上傳到MEDIA_ROOT下的upload_to文件夾中。示例代碼如下:

    class Article(models.Model):title = models.CharField(max_length=100)content = models.TextField()thumbnail = models.FileField(upload_to="%Y/%m/%d/")

    限制上傳的文件拓展名:

    如果想要限制上傳的文件的拓展名,那么我們就需要用到表單來(lái)進(jìn)行限制。我們可以使用普通的Form表單,也可以使用ModelForm,直接從模型中讀取字段。示例代碼如下:

    # models.py class Article(models.Model):title = models.CharField(max_length=100)content = models.TextField()thumbnial = models.FileField(upload_to='%Y/%m/%d/',validators=[validators.FileExtensionValidator(['txt','pdf'])])# forms.py class ArticleForm(forms.ModelForm):class Meta:model = Articlefields = "__all__"

    上傳圖片:

    上傳圖片跟上傳普通文件是一樣的。只不過(guò)是上傳圖片的時(shí)候Django會(huì)判斷上傳的文件是否是圖片的格式(除了判斷后綴名,還會(huì)判斷是否是可用的圖片)。如果不是,那么就會(huì)驗(yàn)證失敗。我們首先先來(lái)定義一個(gè)包含ImageField的模型。示例代碼如下:

    class Article(models.Model):title = models.CharField(max_length=100)content = models.TextField()thumbnail = models.ImageField(upload_to="%Y/%m/%d/")

    因?yàn)橐?yàn)證是否是合格的圖片,因此我們還需要用一個(gè)表單來(lái)進(jìn)行驗(yàn)證。表單我們直接就使用ModelForm就可以了。示例代碼如下:

    class MyForm(forms.ModelForm):class Meta:model = Articlefields = "__all__"

    注意:使用ImageField,必須要先安裝Pillow庫(kù):pip install pillow

    為了更好的學(xué)習(xí)效果,請(qǐng)搭配視頻教程一起學(xué)習(xí):

    Django零基礎(chǔ)到項(xiàng)目實(shí)戰(zhàn) - 網(wǎng)易云課堂?study.163.com

    總結(jié)

    以上是生活随笔為你收集整理的上传文件和提交textfield_0基础掌握Django框架(37)文件上传的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 少妇精品无码一区二区三区 | 福利在线免费 | 免费黄色在线网址 | 日韩av色| 999久久久国产 | 国内自拍亚洲 | 国产精品久久久久久久久借妻 | 欧美日韩视频 | 国产成人网 | 奇米网狠狠干 | 狠狠夜夜 | 欧美精品在线一区二区 | 污污视频在线观看网站 | 亚洲天堂少妇 | 久伊人网 | 亚洲成人h | 91亚洲精品久久久蜜桃借种 | 四虎视频国产精品免费 | 亚洲图片欧美在线看 | 97少妇| 亚洲成人播放 | 欧美精品黄色 | 精品午夜福利视频 | 日本69式三人交 | 国产一区综合 | 国产精品二区在线观看 | 182在线视频| av不卡在线播放 | 一级片免费网站 | 无码久久av一区二区三区 | 国产女人水真多18毛片18精品 | 男人天堂1024 | 91n视频| xxxx.国产 | 美乳人妻一区二区三区 | 网站在线播放 | 999国产视频 | 青青草小视频 | 国产免费黄色av | 欧美脚交视频 | 久久久久久久久久亚洲 | 无码不卡av东京热毛片 | 中文字幕制服丝袜 | 国产福利一区二区三区 | 秋霞国产午夜精品免费视频 | 亚洲视频播放 | 色小姐在线视频 | 亚洲制服丝袜av | 国产精品国产馆在线真实露脸 | 国产乱人乱精一区二视频国产精品 | 丝袜人妖 | 毛片免费视频 | 黑人一级片 | 色老大视频 | 日韩国产欧美视频 | 欧美一级大片在线观看 | 久久久久久久久电影 | 少妇视频一区二区三区 | 99re这里只有精品首页 | 日b免费视频 | 黄色网址www | 青青超碰 | 91精品国产综合久久久蜜臀 | 色女生影院 | 国产三级精品视频 | 亚洲欧美另类在线视频 | 一区二区国产视频 | 亚洲国产一区在线观看 | 日本三级一区二区三区 | 色播五月综合 | 就爱av | 亚洲 欧美 激情 小说 另类 | 成人免费观看视频 | 麻豆精品在线播放 | 国产人妻精品午夜福利免费 | 久久电影一区二区 | 成人黄色一区二区 | 精品国产免费视频 | 欧美日韩久久 | 精品白浆 | 无套白嫩进入乌克兰美女 | 日韩国产精品一区二区三区 | 蜜臀久久99精品久久久久久宅男 | 国产欧美精品一区二区三区app | 国产美女作爱视频 | 国产高清精品一区 | 国产av成人一区二区三区 | 国产5区| 国产精品美女www爽爽爽 | 嫩草国产 | av一区二区三区在线 | 精人妻无码一区二区三区 | 五月天综合在线 | 爆乳2把你榨干哦ova在线观看 | 怡红院国产 | 日韩欧美中文字幕一区二区 | 国产精品卡一卡二 | 欧美美女一区 | 中文字幕无码日韩专区免费 |