一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python+django實現簡單的文件上傳

Python+django實現簡單的文件上傳

2020-09-04 13:29Marksinoberg Python

這篇文章主要為大家詳細介紹了Python+django實現簡單的文件上傳的相關代碼,感興趣的小伙伴們可以參考一下

今天分享一下Django實現的簡單的文件上傳的小例子。

步驟
 •創建Django項目,創建Django應用
 •設計模型
 •處理urls.py 以及views.py
 •設計模板,設計表單
 •運行項目,查看數據庫

下面我們就一起來分別完成每一個小部分吧。

創建項目和應用

django-admin startproject Django_upload

django-admin startapp app

添加一個名為upload的目錄,待會要用哦。

然后記得在settings.py 中的INSTALLED_APPS中加上'app',。注意那個小逗號就行了~~

設計模型

上傳文件需要知道是誰上傳的,上傳了什么。所以我們的 模型很簡單,一個用戶名,一個文件名即可。如下app.models.py

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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']

模型創建完成了,接下來我們就趕緊同步一下數據庫吧。命令很簡單,由于我的Django版本是1.9.6的, 所以原來的

python manage.py syncdb 不能用了 

我們可以使用下面的命令來代替

python manage.py makemigrations

python manage.py migrate

urls.py 以及 views.py

這兩個文件就是為了實現MVC模型的V,C而存在的。
views.py 如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
"""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),
]

一般來說我們會創建一個超級管理員,命令如下:

python manage.py createsuperuser

然后按照相應的提示進行創建就可以了。 

設計模板以及表單

其實剛才就可以在views.py中看到一個為NormalUserForm的類,其存在的意義就是方便從request中取得我們需要的表單數據。而且,恐怕你也注意到了,NormalUserForm的字段和NormalUser模型是一樣的呢。各中哲理自己品味吧 :-)

templates/register.html

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!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>

這里面比較重要的地方有三點:
 •<form method="POST" enctype="multipart/form-data">: 表單特定的格式,注意上傳數據的時候把enctype明確就可以

 •{% csrf_token %}: 跨域請求,我們需要在表單標簽的內部加上這個模板標簽,而且要在views.py中配合render而不是render_to_response來實現

 •{{ uf.as_p }}: 使用.as_p 方式的話,django就會按照默認的樣式在模板頁面輸出表單的所有的字段。

 調試,開啟應用

好了,大部分的任務都做好了,下面就打開我們的開發服務器來驗證一下吧。

python manage.py runserver

打開瀏覽器輸入http://127.0.0.1:8000/register

然后按要求填寫表單,就可以了。彩蛋就是加上了is_valid()方法的views.py會自動的幫助我們對表單數據字段進行驗證!

打開我們的數據庫管理軟件,就會發現里面存儲的只是路徑,而并不是真正的數據。這也體現了大數據存儲的核心理念了。點擊upload目錄,發現文件確實上傳成功了!

總結

今天的這個小例子雖然很簡單,但是里面也有很多值得我們推敲的地方,我的收獲如下。
 •使用models.FileField()實現文件上傳組件

 •對應模型添加一個表單類,字段相同。這樣對于表單數據的獲取會更加更加的方便。uf = NormalUserForm(request.POST,request.FILES)。

 •模板界面表單enctype格式,以及.as_p方式的在html頁面上的表單輸出

就是這樣了!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 荡女人人爱 | 精品久久久久免费极品大片 | 日本成人免费在线视频 | 古装一级无遮挡毛片免费观看 | 波多野结衣xxxx性精品 | 日韩视频一区二区 | 免费一级毛片在级播放 | 国产3p绿奴在线视频 | 亚洲欧美日韩另类精品一区二区三区 | 免费观看一区二区 | 人人做人人爽人人爱 | blacked最大的吊 | 性奶乳妇 | 日本高清免费中文字幕不卡 | 美女被上漫画 | 麻豆网站在线观看 | 情侣奴伺候女王第2部分小说 | 欧美另类杂交a | 久久精品视在线观看85 | 青青草高清视频 | 免费看男女污污完整版 | 色婷婷在线| 91香蕉视频网址 | 福利国产精品 | 欧美日韩精品一区二区三区高清视频 | 日本xxx18hd| 97午夜 | heyzo在线观看 | 亚洲国产日韩制服在线观看 | 国产美女在线一区二区三区 | 亚洲视频观看 | 96日本xxxxxxxxx70 95在线观看精品视频 | 亚洲欧美在线观看一区二区 | 51精品| 暖暖视频免费观看视频中国.韩剧 | 红色一片在线影视 | 欧美色青 | 亚洲一区二区成人 | 99re热这里只有精品 | 久久精品人人做人人爽97 | 免费被黄网站在观看 |