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 相关文章推荐
使用go和python递归删除.ds store文件的方法
Jan 22 Python
浅析Python中的多进程与多线程的使用
Apr 07 Python
RC4文件加密的python实现方法
Jun 30 Python
python黑魔法之参数传递
Feb 12 Python
python装饰器初探(推荐)
Jul 21 Python
快速入手Python字符编码
Aug 03 Python
python制作websocket服务器实例分享
Nov 20 Python
opencv设置采集视频分辨率方式
Dec 10 Python
python wav模块获取采样率 采样点声道量化位数(实例代码)
Jan 22 Python
详解python内置常用高阶函数(列出了5个常用的)
Feb 21 Python
Python获取浏览器窗口句柄过程解析
Jul 25 Python
Python实现单例模式的5种方法
Jun 15 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中定时计划任务的实现原理
2013/01/08 PHP
PHP读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
php不使用copy()函数复制文件的方法
2015/03/13 PHP
thinkphp跨库操作的简单代码实例
2016/09/22 PHP
Laravel相关的一些故障解决
2020/08/19 PHP
JavaScript 核心参考教程 内置对象
2009/10/13 Javascript
页面js遇到乱码问题的解决方法是和无法转码的情况
2014/04/30 Javascript
整理AngularJS中的一些常用指令
2015/06/16 Javascript
xtemplate node.js 的使用方法实例解析
2016/08/22 Javascript
最全面的百度地图JavaScript离线版开发
2016/09/10 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
2016/12/02 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
VUE元素的隐藏和显示(v-show指令)
2017/06/23 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
Vue基础配置讲解
2019/11/29 Javascript
JavaScript数组排序小程序实现解析
2020/01/13 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
使用Node.js实现base64和png文件相互转换的方法
2020/03/11 Javascript
javascript实现移动端红包雨页面
2020/06/23 Javascript
vue 保留两位小数 不能直接用toFixed(2) 的解决
2020/08/07 Javascript
Python脚本实现DNSPod DNS动态解析域名
2015/02/14 Python
Python中的Numeric包和Numarray包使用教程
2015/04/13 Python
Python pandas对excel的操作实现示例
2020/07/21 Python
Python如何执行系统命令
2020/09/23 Python
python在地图上画比例的实例详解
2020/11/13 Python
详解HTML5 Canvas绘制不规则图形时的非零环绕原则
2016/03/21 HTML / CSS
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
Lookfantastic法国官网:英国知名美妆购物网站
2017/10/28 全球购物
Marlies Dekkers内衣美国官方网上商店:高端内衣品牌
2018/11/12 全球购物
2014政务公开实施方案
2014/02/19 职场文书
和睦家庭事迹
2014/05/14 职场文书
离婚起诉书范本
2015/05/18 职场文书
HTML+CSS制作心跳特效的实现
2021/05/26 HTML / CSS
springboot中rabbitmq实现消息可靠性机制详解
2021/09/25 Java/Android
Python中使用Opencv开发停车位计数器功能
2022/04/04 Python