Python+django實(shí)現(xiàn)簡(jiǎn)單的文件上傳
今天分享一下Django實(shí)現(xiàn)的簡(jiǎn)單的文件上傳的小例子。
步驟
•創(chuàng)建Django項(xiàng)目,創(chuàng)建Django應(yīng)用
•設(shè)計(jì)模型
•處理urls.py 以及views.py
•設(shè)計(jì)模板,設(shè)計(jì)表單
•運(yùn)行項(xiàng)目,查看數(shù)據(jù)庫(kù)
下面我們就一起來(lái)分別完成每一個(gè)小部分吧。
創(chuàng)建項(xiàng)目和應(yīng)用
django-admin startproject Django_upload
django-admin startapp app
添加一個(gè)名為upload的目錄,待會(huì)要用哦。
然后記得在settings.py 中的INSTALLED_APPS中加上'app',。注意那個(gè)小逗號(hào)就行了~~
設(shè)計(jì)模型
上傳文件需要知道是誰(shuí)上傳的,上傳了什么。所以我們的 模型很簡(jiǎn)單,一個(gè)用戶名,一個(gè)文件名即可。如下app.models.py
from __future__ import unicode_literals
from django.db import models
# Create your models here.
# User CLass for user,username and userimg path
class NormalUser(models.Model):
username = models.CharField(max_length=30)
headImg = models.FileField(upload_to='./upload')
def __unicode__(self):
return self.username
class Meta:
ordering = ['username']
模型創(chuàng)建完成了,接下來(lái)我們就趕緊同步一下數(shù)據(jù)庫(kù)吧。命令很簡(jiǎn)單,由于我的Django版本是1.9.6的, 所以原來(lái)的
python manage.py syncdb 不能用了
我們可以使用下面的命令來(lái)代替
python manage.py makemigrations
python manage.py migrate
urls.py 以及 views.py
這兩個(gè)文件就是為了實(shí)現(xiàn)MVC模型的V,C而存在的。
views.py 如下:
from django.shortcuts import render,render_to_response
from django import forms
from django.http import HttpResponse
from app.models import *
# Create your views here.
class NormalUserForm(forms.Form):
username = forms.CharField()
headImg = forms.FileField()
def registerNormalUser(request):
if request.method == "POST":
uf = NormalUserForm(request.POST,request.FILES)
if uf.is_valid():
# get the info of the form
username = uf.cleaned_data['username']
headImg = uf.cleaned_data['headImg']
# write in database
normalUser = NormalUser()
normalUser.username = username
normalUser.headImg = headImg
normalUser.save()
return HttpResponse('Upload Succeed!')
else:
uf = NormalUserForm()
return render(request,'register.html',{'uf':uf})
urls.py
"""Django_upload URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.9/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
from django.conf.urls import url
from django.contrib import admin
from app.views import *
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^register/$',registerNormalUser),
]
一般來(lái)說(shuō)我們會(huì)創(chuàng)建一個(gè)超級(jí)管理員,命令如下:
python manage.py createsuperuser
然后按照相應(yīng)的提示進(jìn)行創(chuàng)建就可以了。
設(shè)計(jì)模板以及表單
其實(shí)剛才就可以在views.py中看到一個(gè)為NormalUserForm的類,其存在的意義就是方便從request中取得我們需要的表單數(shù)據(jù)。而且,恐怕你也注意到了,NormalUserForm的字段和NormalUser模型是一樣的呢。各中哲理自己品味吧 :-)
templates/register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Register</title>
</head>
<body>
<h2 align="center">Register</h2>
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ uf.as_p }}
<input type="submit" value="Submit">
</form>
</body>
</html>
這里面比較重要的地方有三點(diǎn):
•<form method="POST" enctype="multipart/form-data">: 表單特定的格式,注意上傳數(shù)據(jù)的時(shí)候把enctype明確就可以
•{% csrf_token %}: 跨域請(qǐng)求,我們需要在表單標(biāo)簽的內(nèi)部加上這個(gè)模板標(biāo)簽,而且要在views.py中配合render而不是render_to_response來(lái)實(shí)現(xiàn)
•{{ uf.as_p }}: 使用.as_p 方式的話,django就會(huì)按照默認(rèn)的樣式在模板頁(yè)面輸出表單的所有的字段。
調(diào)試,開(kāi)啟應(yīng)用
好了,大部分的任務(wù)都做好了,下面就打開(kāi)我們的開(kāi)發(fā)服務(wù)器來(lái)驗(yàn)證一下吧。
python manage.py runserver
打開(kāi)瀏覽器輸入http://127.0.0.1:8000/register
然后按要求填寫表單,就可以了。彩蛋就是加上了is_valid()方法的views.py會(huì)自動(dòng)的幫助我們對(duì)表單數(shù)據(jù)字段進(jìn)行驗(yàn)證!
打開(kāi)我們的數(shù)據(jù)庫(kù)管理軟件,就會(huì)發(fā)現(xiàn)里面存儲(chǔ)的只是路徑,而并不是真正的數(shù)據(jù)。這也體現(xiàn)了大數(shù)據(jù)存儲(chǔ)的核心理念了。點(diǎn)擊upload目錄,發(fā)現(xiàn)文件確實(shí)上傳成功了!
總結(jié)
今天的這個(gè)小例子雖然很簡(jiǎn)單,但是里面也有很多值得我們推敲的地方,我的收獲如下。
•使用models.FileField()實(shí)現(xiàn)文件上傳組件
•對(duì)應(yīng)模型添加一個(gè)表單類,字段相同。這樣對(duì)于表單數(shù)據(jù)的獲取會(huì)更加更加的方便。uf = NormalUserForm(request.POST,request.FILES)。
•模板界面表單enctype格式,以及.as_p方式的在html頁(yè)面上的表單輸出
就是這樣了!
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Django實(shí)現(xiàn)文件上傳下載功能
- GO語(yǔ)言實(shí)現(xiàn)文件上傳代碼分享
- Python+django實(shí)現(xiàn)文件上傳
- Django實(shí)現(xiàn)文件上傳和下載功能
- golang語(yǔ)言實(shí)現(xiàn)的文件上傳與文件下載功能示例
- Django處理文件上傳File Uploads的實(shí)例
- python+django快速實(shí)現(xiàn)文件上傳
- Django框架文件上傳與自定義圖片上傳路徑、上傳文件名操作分析
- Python的Django中將文件上傳至七牛云存儲(chǔ)的代碼分享
- Go語(yǔ)言實(shí)現(xiàn)文件上傳
相關(guān)文章
Python enumerate函數(shù)功能與用法示例
這篇文章主要介紹了Python enumerate函數(shù)功能與用法,結(jié)合實(shí)例形式分析了enumerate函數(shù)針對(duì)列表、字符串遍歷操作相關(guān)使用技巧,需要的朋友可以參考下2019-03-03
從請(qǐng)求到響應(yīng)過(guò)程中django都做了哪些處理
這篇文章主要給大家介紹了關(guān)于從請(qǐng)求到響應(yīng)過(guò)程中django都做了哪些處理的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08
python數(shù)據(jù)分析之聚類分析(cluster analysis)
聚類分析本身不是一個(gè)特定的算法,而是要解決的一般任務(wù)。它可以通過(guò)各種算法來(lái)實(shí)現(xiàn),這些算法在理解群集的構(gòu)成以及如何有效地找到它們方面存在顯著差異。這篇文章主要介紹了python數(shù)據(jù)分析之聚類分析(cluster analysis),需要的朋友可以參考下2021-11-11
Python爬蟲(chóng)爬驗(yàn)證碼實(shí)現(xiàn)功能詳解
這篇文章主要介紹了Python爬蟲(chóng)爬驗(yàn)證碼實(shí)現(xiàn)功能詳解的相關(guān)資料,需要的朋友可以參考下2016-04-04
淺談PyQt5 的幫助文檔查找方法,可以查看每個(gè)類的方法
今天小編就為大家分享一篇淺談PyQt5 的幫助文檔查找方法,可以查看每個(gè)類的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
numpy數(shù)據(jù)類型dtype轉(zhuǎn)換實(shí)現(xiàn)
這篇文章主要介紹了numpy數(shù)據(jù)類型dtype轉(zhuǎn)換實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Python pandas之求和運(yùn)算和非空值個(gè)數(shù)統(tǒng)計(jì)
數(shù)據(jù)處理的過(guò)程中經(jīng)常會(huì)遇到判斷空值和求和運(yùn)算的需求,所以下面這篇文章主要給大家介紹了關(guān)于Python pandas之求和運(yùn)算和非空值個(gè)數(shù)統(tǒng)計(jì)的相關(guān)資料,需要的朋友可以參考下2021-08-08
Python numpy 數(shù)組的向量化運(yùn)算操作方法
這篇文章主要介紹了Python numpy數(shù)組的向量化運(yùn)算操作方法,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
python 系統(tǒng)調(diào)用的實(shí)例詳解
這篇文章主要介紹了python 系統(tǒng)調(diào)用的實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-07-07

