1. 程式人生 > >python django 實現檔案上傳

python django 實現檔案上傳

最近在學習 python django 框架,然後網上找了好多東西在做,下面是實現的第一個功能。

通過 python django 實現 web 頁面上傳檔案至伺服器。

操作環境:

Centos 7
Python 2.7.5
Django 1.10.2

建立專案與應用

建立project和app,分別為project和app

[root@centos7-201 ~]# django-admin.py startproject project
[root@centos7-201 ~]# cd project/
[root@centos7-201 project]# django-admin.py startapp app

編輯project/settings.py檔案,將新定義的 app 加入到 INSTALLED_APPS 配置項裡面 。如果不加的話,django 就不能自動找到app中的模板檔案(app-name/templates/下的檔案)和靜態檔案(app-name/static/中的檔案)

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages'
, 'django.contrib.staticfiles', 'app', ]

設計Model(資料庫)

編輯app/models.py檔案,新建一個類,並且建立兩個欄位,分別用於儲存使用者名稱和上傳的檔案

CharField:用於儲存字串, max_length設定最大長度
FileField:用於儲存檔案字串,upload_to設定檔案上傳路徑

from __future__ import unicode_literals
from django.db import models

# Create your models here.
class User
(models.Model):
username = models.CharField(max_length = 30) filename = models.FileField(upload_to = './upload/') def __unicode__(self): return self.username

建立完成之後進行資料庫同步

python manage.py makemigrations
python manage.py migrate

makemigrations:makemigrations命令用來建立新的model
migrate:migrate命令按照app順序建立或者更新資料庫, 將models.py與資料庫同步

它會生成app_user表,就我是我們models.py 中所建立的類。Django 提供了他們之間的對應關係。

[root@centos7-201 project]# python manage.py makemigrations
Migrations for 'app':
  app/migrations/0001_initial.py:
    - Create model User
[root@centos7-201 project]# python manage.py migrate
Operations to perform:
  Apply all migrations: admin, app, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying app.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying sessions.0001_initial... OK
[root@centos7-201 project]# 

建立檢視

1、編輯app/views.py檔案

form.is_valid

# -*- coding:utf-8 -*-
from django.shortcuts import render
from django.shortcuts import render_to_response
from django import forms
from django.http import HttpResponse
from app.models import User

# Create your views here.
class UserForm(forms.Form):
    username = forms.CharField()
    filename = forms.FileField()

def register(request):
    if request.method == 'POST':
        form = UserForm(request.POST, request.FILES)
        if form.is_valid():
            # 獲取表單資料
            username = form.cleaned_data['username']
            filename = form.cleaned_data['filename']
            # 獲取資料庫資料
            user = User()
            user.username = username
            user.filename = filename
            user.save()
            return HttpResponse('file upload ok !')
    else:
        form = UserForm()
    return render_to_response('register.html', {'form': form})

form.is_valid()返回true後,表單資料都被儲存在form.cleaned_data物件中(字典型別,意為經過清洗的資料),而且資料會被自動轉換為Python物件,如:在form中定義了DateTimeField,那麼該欄位將被轉換為datetime型別,還有諸如:IntegerField、FloatField

user.save() 將資訊保存於資料庫中

2、建立web頁面

建立目錄 templates

[root@centos7-201 project]# mkdir app/templates

建立app/templates/register.html檔案並進行編輯

method=post:方法為post
enctype=multipart/form-data:表單中enctype=multipart/form-data的意思,是設定表單的MIME編碼。預設情況,這個編碼格式是application/x-www-form-urlencoded,不能用於檔案上傳;只有使用了multipart/form-data,才能完整的傳遞檔案資料

顯示form找template中的方法多種多樣,也可以自定義,下面三個分別表示用p標籤,table標籤和ul表示顯示錶單

  • form.as_p
  • form.as_table
  • form.as_ul

vim app/templates/register.html

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title></title>
</head>
<body>
    <h1>upload file</h1>
    <form method="post" enctype="multipart/form-data" >
        {{ form.as_p }}
        <input type="submit" value="Submit" />
    </form>
</body>
</html>

3、設定模板路徑

編輯project/urls.py檔案,新增url匹配規則

from django.conf.urls import url
from django.contrib import admin
from app import views as app_views

urlpatterns = [
    url(r'^app/$', app_views.register),
    url(r'^admin/', admin.site.urls),
]

4、註釋掉全域性控制引數

編輯project/settings.py檔案,找到MIDDLEWARE,註釋掉它,不然上傳檔案報錯

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    #'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

5、上傳檔案

開啟web瀏覽器進行上傳,點選Submit提交後提示 file upload ok,說明檔案已經上傳成功

這裡寫圖片描述

這裡寫圖片描述

6、驗證

上傳的檔案在 ./upload 目錄下面
資料庫所記錄檔案的順序,username及filename,我們可以通過命令進行檢視

[[email protected]201 project]# ls
app  db.sqlite3  manage.py  project  upload
[[email protected]201 project]# 
[[email protected]201 project]# ls upload/
install.sh
[[email protected]201 project]# sqlite3 db.sqlite3 
sqlite> select * from app_user;
1|wanglei|upload/install.sh

相關推薦

python django 實現檔案

最近在學習 python django 框架,然後網上找了好多東西在做,下面是實現的第一個功能。 通過 python django 實現 web 頁面上傳檔案至伺服器。 操作環境: Centos 7 Python 2.7.5 Django 1.10.2

python-selctors實現檔案

服務端程式碼:程式目錄server/server.py   上傳檔案目錄:server/upload import os import time import socket import selectors #封裝了一些相應的操作 BASE

Python+Django+Js並利用表單實現檔案

這段程式碼適用於利用form表單進行檔案的提交,並保證所提交的檔案格式為txt。 判斷檔案是否存在,如果存在則刪除舊檔案儲存新檔案並執行A,如果不存在則執行B。 前端: <form action="{% url 'searchform' %}  method="P

selenium+python實現檔案的方法(1)

檔案上傳 上傳檔案是比較常見的web端操作,但是在selenium的webdriver中沒有專門用於上傳的方法,下面介紹send_keys上傳方式實現上傳檔案 首先建立一個html檔案,主要實現上傳功能 upload file 頁面長這個樣子(每個瀏覽器裡頁面可能長得不一樣):

python+selenium win32gui實現檔案 enumerate() Unity3d中SendMessage 用法簡單筆記

upload = dr.find_element_by_id('exampleInputFile0') upload.click() time.sleep(1) # win32gui dialog = win32gui.FindWindow('#32770', u'開啟') # 對話方塊 ComboBoxE

django 12、實現檔案

一、實現檔案上傳 1定義模型 #上傳作品表:作品名稱,使用者名稱 class Upload(models.Model): #注意這裡的使用者名稱是FileField型別 name = models.FileField(upload_to = './uplo

Django實現檔案功能

在web開發中,檔案上傳與下載是常見的功能,在Django中實現檔案的上傳與下載也非常簡單,實現步驟與其他功能實現類似,1. 新建一個模板,2. 編寫模板對應的view函式,3. 配置view與模板關

django 快速實現檔案(django2.0)

django2.0 快速實現檔案上傳 本操作環境: 虛擬環境:django2.0 python3.5(應該python3.6都可以使用) window10 1.建立專案與應用(專案和應用都是自己制定的) 建立專案:django-admin star

Django與Ajax三---實現檔案

1>先看下基於FORM表單的檔案上傳 為了證明設個request.FILES裡面存的確實是一個檔案物件,我們把它下載下來, 2>再看ajax怎麼實現檔案上傳 看下上面的檔案取值 所以   $('#file')[0].file

django實現圖片和顯示

代碼 ngs 文件路徑 ont 添加 pac pre bubuko contex 首先安裝pillow模塊 在models.py下設置 class Notices(models.Model): NoticeCategory=models.CharField(max_

struts2實現檔案與下載功能

一、Demo介紹 基於struts2框架,實現多檔案的上傳和下載功能。 實現原理圖: 部分介面圖: 上傳成功及下載頁面: 二、主要程式碼 uploadFile.jsp:在form表單中包含一個文字框(上傳使用者的姓名)和兩個檔案上傳選項. <%@

Java Springboot結合FastDFS實現檔案以及根據圖片url將圖片至圖片伺服器

上一篇文章我們已經講解了如何搭建FastDFS圖片伺服器,環境我們準備好了現在就讓我們開始與Java結合將他應用到實際的專案中吧。本篇文章我們將會展示上傳圖片到FastDFS圖片伺服器以及通過外網的圖片url將圖片上傳至我們自己的圖片伺服器中。 1.建立springbo

yii框架實現檔案

yii框架實現檔案上傳 1.首先yii框架下載uploadFile類 2.html程式碼 <input type="file" class="file" style="display: none" name="business_license" /> 3.j

原生javascript實現檔案功能程式碼

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ini

【SSH網上商城專案實戰13】Struts2實現檔案功能

  轉自:https://blog.csdn.net/eson_15/article/details/51366384 上一節我們做完了新增和更新商品的功能,這兩個部分裡有涉及到商品圖片的上傳,並沒有詳細解說。為此,這篇文章詳細介紹一下Struts2實現檔案上傳的功能。 1

Django檔案以及中間鍵

1、圖片的上傳 案例:使用者註冊圖片上傳 1、設計模型 u_name 使用者名稱 u_age 密碼 u_img 頭像 # 儲存頭像--本質上儲存的是檔案的路徑 # 目錄:static/upload/icon # upload_to 表示指定圖片上傳的相對路徑名,及檔案上傳的額路

關於myeclipse實現檔案與使用的路徑問題

在檔案上傳的時候編寫檔案儲存應該儲存到 myeclipse 的workspace的工程目錄下面,而不是放到tomcat的webapps下面。否則eclipse 無法更新檔案。 換句話講,在eclipse中新增檔案,comcat的專案檔案中可以看見新增的文體,但是反過來,在comcat的工程目錄下

django FileField檔案重新命名,ModelForm驗證儲存

models.py class TeleplayTable(models.Model): tid = models.CharField(max_length=50, primary_key=True, verbose_name='ID') name = models.Ch

Python Flask網站檔案

1、首先在APP的__init__裡面配置上傳路徑 UPLOAD_FOLDER = 'uploads' APP_DIR=os.path.dirname(__file__) STATIC_DIR=os.path.join(APP_DIR,"static") def create_app(conf