django 文件上传功能的相关实例代码(简单易懂)


Posted in Python onJanuary 22, 2020

一、新建项目,在主配置文件中,修改以下内容:

ALLOWED_HOSTS = ['127.0.0.1','localhost']
MEDIA_ROOT = os.path.join(BASE_DIR,'media')
STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static'), MEDIA_ROOT]

在该项目下新建一个与 manage.py 同级的目录文件,目录名为media。
在media文件夹下新建一个子目录,作为上传文件的保存位置,这里我把该子目录命名为headpics。即模拟保存用户选择的头像文件。

二、新建APP(这里我把该app命名为uploadFile)

执行如下命令将创建app:

python manage.py startapp uploadFile

在uploadFile下的models.py文件下,粘贴如下代码:

from django.db import models

class User(models.Model):
 name = models.CharField(max_length=12)
 file = models.FileField(upload_to='headpics')

不要忘了在主配置文件的 INSTALLED_APPS 列表下注册该app。

然后在控制台执行如下命令:

python manage.py makemigrations uploadFile
python manage.py migrate uploadFile

三、编写路由

在主路由模块下粘贴如下代码:

from django.contrib import admin
from django.urls import path,include

urlpatterns = [
 path('admin/', admin.site.urls),
 path('index/',include("uploadFile.urls")),
]

admin 是pycharm自动添加的,不需要的话可以删去。

然后在uploadFile下新建urls.py模块,即编写二级路由。

在二级路由下粘贴如下代码:

from django.urls import path
from . import views

app_name = 'upload'
urlpatterns = [
 path('file/',views.userfile,name='userfile'),
 path('file/detail/',views.detailFile,name='delfile'),
]

四、编写视图函数

在uploadFile的views.py文件下粘贴如下代码:

from django.shortcuts import render,get_object_or_404
from django.http import HttpResponse
import uuid,os
from .models import User
# Create your views here.
def userfile(request):
 return render(request,'uploadFile/uploadFile.html')
def detailFile(request):
 if request.method == "POST":
  name = request.POST.get('name')
  file = request.FILES.get('file',None)
  if not file:
   return HttpResponse("<p>您还未上传头像!</p>")
  file.name = getUUID(file.name)
  user = User.objects.create(name=name, file=file)
  with open(os.path.join("D:\\upload",file.name),'wb+') as relfile:
   for crunk in file.chunks():
    relfile.write(crunk)
  return HttpResponse("<p>上传成功!</p>")
 else:
  pass
def getUUID(filename):
 id = str(uuid.uuid4())
 extend = os.path.splitext(filename)[1]
 return id+extend

五、编写模板

在uploadFile下新建一个叫做templates的目录,在该目录下再新建一个叫做uploadFile的子目录,在该子目录下再新建一个叫做uploadFile的html文件。

在该html文件内粘贴如下代码:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>upload</title>
</head>
<body>
 <form action="{% url 'upload:delfile' %}" method="post" enctype="multipart/form-data">
  {% csrf_token %}
  昵称 :<input type="text" name="name"><br><br>
  头像 :  <input type="file" name="file"><br><br>
  <input type="submit" value="提交">
 </form>
</body>
</html>

大功告成!

运行之后,在浏览器 输入 http://127.0.0.1:8000/index/file/ 可以看到界面效果,如下:

django 文件上传功能的相关实例代码(简单易懂)

输入之后点击提交,数据就会被实时保存在数据库中,不过要记得在数据库中 file 字段保存的其实是文件的路径信息,是一个字符串。

同时,该文件也会保存在刚才创建的upload文件夹下。

可以尝试添加更多内容,比如在提交成功之后返回一个效果页面等。

总结

以上所述是小编给大家介绍的django 文件上传功能的相关实例代码,希望对大家有所帮助!

Python 相关文章推荐
Python探索之创建二叉树
Oct 25 Python
Python机器学习之K-Means聚类实现详解
Feb 22 Python
使用python socket分发大文件的实现方法
Jul 08 Python
Django 模型类(models.py)的定义详解
Jul 19 Python
Django处理Ajax发送的Get请求代码详解
Jul 29 Python
如何关掉pycharm中的python console(图解)
Oct 31 Python
Python函数参数类型及排序原理总结
Dec 19 Python
Python生成pdf目录书签的实例方法
Oct 29 Python
python 操作excel表格的方法
Dec 05 Python
python3中for循环踩过的坑记录
Dec 14 Python
django中ImageField的使用详解
Dec 21 Python
Elasticsearch 数据类型及管理
Apr 19 Python
python动态文本进度条的实例代码
Jan 22 #Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
Jan 22 #Python
使用Python实现Wake On Lan远程开机功能
Jan 22 #Python
python定义类self用法实例解析
Jan 22 #Python
通过实例解析python描述符原理作用
Jan 22 #Python
python基于property()函数定义属性
Jan 22 #Python
Python @property装饰器原理解析
Jan 22 #Python
You might like
PHP memcache扩展的三种安装方法
2009/04/26 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
2011/10/08 PHP
基于Zend的Config机制的应用分析
2013/05/02 PHP
zf框架的registry(注册表)使用示例
2014/03/13 PHP
php计算给定时间之前的函数用法实例
2015/04/03 PHP
php结合正则获取字符串中数字
2015/06/19 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
PHP获取对象属性的三种方法实例分析
2019/01/03 PHP
使用正则替换变量
2007/05/05 Javascript
jQuery实现页面滚动时层智能浮动定位实例探讨
2013/03/29 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
2016/03/11 Javascript
一种基于浏览器的自动小票机打印实现方案(js版)
2016/07/26 Javascript
JavaScript使用delete删除数组元素用法示例【数组长度不变】
2017/01/17 Javascript
NodeJS测试框架mocha入门教程
2017/03/28 NodeJs
vue开发环境配置跨域的方法步骤
2019/01/16 Javascript
javascriptvoid(0)含义以及与&quot;#&quot;的区别讲解
2019/01/19 Javascript
12个提高JavaScript技能的概念(小结)
2019/05/09 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
2019/07/06 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
ubuntu系统下 python链接mysql数据库的方法
2017/01/09 Python
解决python爬虫中有中文的url问题
2018/05/11 Python
一文带你了解Python中的字符串是什么
2018/11/20 Python
python利用7z批量解压rar的实现
2019/08/07 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
使用html2canvas.js实现页面截图并显示或上传的示例代码
2018/12/18 HTML / CSS
Hanro官网:奢华男士和女士内衣、睡衣和家居服
2018/10/25 全球购物
寻找迷宫的一条出路,o通路;X:障碍
2016/07/10 面试题
护理专业学生职业生涯规划范文
2014/03/11 职场文书
cf收人广告词大全
2014/03/14 职场文书
《火烧云》教学反思
2014/04/12 职场文书
消防安全标语
2014/06/07 职场文书
运动会的口号
2014/06/09 职场文书
2016年习总书记讲话学习心得体会
2016/01/20 职场文书
2019年感恩励志演讲稿(收藏备用)
2019/09/11 职场文书
Python中递归以及递归遍历目录详解
2021/10/24 Python
Win10开机修复磁盘错误怎么跳过?Win10关闭开机磁盘检查的方法
2022/09/23 数码科技