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

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 如下:

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),
]

一般来说我们会创建一个超级管理员,命令如下:

python manage.py createsuperuser
然后按照相应的提示进行创建就可以了。

设计模板以及表单

其实刚才就可以在views.py中看到一个为NormalUserForm的类,其存在的意义就是方便从request中取得我们需要的表单数据。而且,恐怕你也注意到了,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>

这里面比较重要的地方有三点:

  • <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页面上的表单输出

    就是这样了!

时间: 2024-08-02 17:58:05

Django 实现简单的文件上传的相关文章

Python+django实现简单的文件上传_python

今天分享一下Django实现的简单的文件上传的小例子. 步骤 •创建Django项目,创建Django应用  •设计模型  •处理urls.py 以及views.py  •设计模板,设计表单  •运行项目,查看数据库 下面我们就一起来分别完成每一个小部分吧. 创建项目和应用 django-admin startproject Django_upload django-admin startapp app 添加一个名为upload的目录,待会要用哦. 然后记得在settings.py 中的INST

mfc-用MFC做一个简单的文件上传的程序 ,上传过程中的暂停和继续怎么实现?

问题描述 用MFC做一个简单的文件上传的程序 ,上传过程中的暂停和继续怎么实现? rt 解决方案 能不能中断和继续取决于服务器怎么实现的,服务器必须具有分块接收上传文件的能力. 解决方案二: 你要把你的主要实现和主界面分开,就是用多线程,一个线程用于处理数据,主界面线程用于显示和接受用户操作,当用户按开始按钮时,开启处理线程,暂停时暂停处理线程,继续时再唤醒处理线程就行了. 解决方案三: java Web && 文件上传--简单实现

jQuery+ajax简单实现文件上传的方法_jquery

本文实例讲述了jQuery+ajax简单实现文件上传的方法.分享给大家供大家参考,具体如下: 可以通过ajax来提交表单,而不会刷新页面.主要使用的方法是 $("#formID").ajaxSubmit()方法. 1.要引入js插件 需要下载的附件:jquery.form.js 2.页面代码: <script src="project/js/jquery.form.js" type="text/javascript"></scr

thinkPHP3.2简单实现文件上传的方法_php实例

本文实例讲述了thinkPHP3.2简单实现文件上传的方法.分享给大家供大家参考,具体如下: IndexController.class.php: <?php namespace Home\Controller; use Think\Controller; class IndexController extends Controller { function index(){ $this->display(); } public function upload(){ $upload = new

php简单实用文件上传代码(1/2)

<?php教程 if($_files['file']){  // ----------------------------------------------------------------------------------------------// // // 说明:文件上传   日期:2004-5-2 // // --------------------------------------------------------------------------------------

php最简单的文件上传代码

php最简单的文件上传代码 <?php    include("top.txt");    include("scripts.txt");    if(isset($_FILES['ufile']['name'])){        echo "Uploading: ".$_FILES['ufile']['name']."<br>";        $tmpName = $_FILES['ufile']['t

用VB6做一个简单的文件上传组件(一)

最近在单位做的一个项目里需要有文件上传的功能正好手头一本书的附赠光盘里有一个上传组件心中大喜.可惜随之便发现这是一个试用版不给钱就只能用50次太小气了好在头头催得不紧时间充裕干脆自己试着做一个既可长经验值又能长成就感不试白不试以下介绍的便是俺折腾了两天半捣鼓出来的一个只能说是雏形的玩意区区三十行代码大侠们不要笑俺哦这只是写给与俺一样好奇心强但经验值低的弟兄们看的.    文件上载所需的第一步当然是进入一个有"file"表单元素的页面具体就不说了大家都知道.但是若想做一个能够接受该文件并

java中struts2实现简单的文件上传与下载_java

一.Struts2文件上传 Struts2的文件上传实现非常简单,只需要简单几步就可完成:注意: (1)文件上传的struts2标签为:<s:file name="" label="上传"/> (2)文件上传的前提是表单属性method="post" enctype="multipart/form-data"; (3)web应用中必须包含common-fileupload.jar和common-io.jar,因为s

一段简单 ASP文件上传实例

本教程将告诉你需要建立一个简单的应用程序,使用户能够上传PDF文件到服务器的步骤,删除现有的文件和查看他们的浏览器中的文件.这个例子使用我们自己的dgFileUpload组成部分,你可以下载一个15天的试用版在这里,您可以按照教程和测试自己的服务器完成的应用程序.所有的源代码,随着小Access 2000数据库教程在本教程中使用,可以下载在这里作为一个ZIP档案. 在下载并取消荏苒存档,您的网站根目录下创建(如的'C: inetpub wwwroot的 dgUpload'),并把两个ASP页(新