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中元组,列表,字典的区别
May 21 Python
对python实时得到鼠标位置的示例讲解
Oct 14 Python
Pytorch中index_select() 函数的实现理解
Nov 19 Python
python快速排序的实现及运行时间比较
Nov 22 Python
jupyter notebook tensorflow打印device信息实例
Apr 20 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
May 24 Python
python3.6中anaconda安装sklearn踩坑实录
Jul 28 Python
PyTorch安装与基本使用详解
Aug 31 Python
如何快速一次性卸载所有python包(第三方库)呢
Oct 20 Python
如何用python实现一个HTTP连接池
Jan 14 Python
PyTorch的Debug指南
May 07 Python
python munch库的使用解析
May 25 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下删除字符串中HTML标签的函数
2008/08/27 PHP
php高级编程-函数-郑阿奇
2011/07/04 PHP
apache mysql php 源码编译使用方法
2012/05/03 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
2011/10/29 Javascript
JS+CSS实现感应鼠标渐变显示DIV层的方法
2015/02/20 Javascript
AngularJS页面访问时出现页面闪烁问题的解决
2016/03/06 Javascript
Bootstrap下拉菜单Dropdowns的实现代码
2017/03/17 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
NodeJS自定义模块写法(详解)
2017/06/27 NodeJs
Angular.js前台传list数组由后台spring MVC接收数组示例代码
2017/07/31 Javascript
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
解决Vue-cli无法编译es6的问题
2020/10/30 Javascript
浅谈python import引入不同路径下的模块
2017/07/11 Python
几种实用的pythonic语法实例代码
2018/02/24 Python
pandas 两列时间相减换算为秒的方法
2018/04/20 Python
pyspark 读取csv文件创建DataFrame的两种方法
2018/06/07 Python
Python实现带下标索引的遍历操作示例
2019/05/30 Python
python3.x+pyqt5实现主窗口状态栏里(嵌入)显示进度条功能
2019/07/04 Python
django最快程序开发流程详解
2019/07/19 Python
Python协程操作之gevent(yield阻塞,greenlet),协程实现多任务(有规律的交替协作执行)用法详解
2019/10/14 Python
python 实现return返回多个值
2019/11/19 Python
Python中sys模块功能与用法实例详解
2020/02/26 Python
利用python对excel中一列的时间数据更改格式操作
2020/07/14 Python
草莓网美国官网:Strawberrynet USA
2016/12/11 全球购物
英国领先的高街书籍专家:Waterstones
2018/02/01 全球购物
捷克钓鱼用品网上商店:Parys.cz
2018/06/15 全球购物
职称自我鉴定
2013/10/15 职场文书
知识竞赛活动方案
2014/02/18 职场文书
年度优秀员工获奖感言
2014/08/15 职场文书
2014年文秘工作总结
2014/11/25 职场文书
上课讲话检讨书范文
2015/05/07 职场文书
《坐井观天》教学反思
2016/02/18 职场文书
详细聊聊vue中组件的props属性
2021/11/02 Vue.js