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 20 Python
Python之csv文件从MySQL数据库导入导出的方法
Jun 21 Python
使用Python获取并处理IP的类型及格式方法
Nov 01 Python
Python 实现数据结构-循环队列的操作方法
Jul 17 Python
python实现大文件分割与合并
Jul 22 Python
Django框架模板用法入门教程
Nov 04 Python
基于virtualenv创建python虚拟环境过程图解
Mar 30 Python
Python threading模块condition原理及运行流程详解
Oct 05 Python
Django框架请求生命周期实现原理
Nov 13 Python
10张动图学会python循环与递归问题
Feb 06 Python
python解包概念及实例
Feb 17 Python
pytorch 带batch的tensor类型图像显示操作
May 20 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中的boolean(布尔)类型详解
2013/10/28 PHP
ThinkPHP使用PHPExcel实现Excel数据导入导出完整实例
2014/07/22 PHP
PHP依赖倒置(Dependency Injection)代码实例
2014/10/11 PHP
使用JavaScript创建新样式表和新样式规则
2016/06/14 PHP
php源码 fsockopen获取网页内容实例详解
2016/09/24 PHP
PHP微信H5支付开发实例
2018/07/25 PHP
多浏览器支持的右下角浮动窗口
2010/04/01 Javascript
Javascript 面试题随笔
2011/03/31 Javascript
js对列表中第一个值处理与jsp页面对列表中第一个值处理的区别详解
2013/11/05 Javascript
js对table的td进行相同内容合并示例详解
2013/12/27 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
jQuery中选择器的基础使用教程
2016/05/23 Javascript
js验证真实姓名与身份证号,手机号的简单实例
2016/07/18 Javascript
微信公众号 客服接口的开发实例详解
2016/09/28 Javascript
Bootstrap超大屏幕的实现代码
2017/03/22 Javascript
JavaScript中十种一步拷贝数组的方法实例详解
2019/04/22 Javascript
angularjs1.X 重构controller 的方法小结
2019/08/15 Javascript
三步搞定:Vue.js调用Android原生操作
2020/09/07 Javascript
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
Python实现冒泡,插入,选择排序简单实例
2014/08/18 Python
python提示No module named images的解决方法
2014/09/29 Python
Python fileinput模块使用实例
2015/05/28 Python
举例讲解Python中的迭代器、生成器与列表解析用法
2016/03/20 Python
利用arcgis的python读取要素的X,Y方法
2018/12/22 Python
详解从Django Rest Framework响应中删除空字段
2019/01/11 Python
Jupyter notebook快速入门教程(推荐)
2020/05/18 Python
python递归函数用法详解
2020/10/26 Python
HTML5之web workers_动力节点Java学院整理
2017/07/17 HTML / CSS
HTML5+CSS3绘制锯齿状的矩形
2016/03/01 HTML / CSS
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
Javascript如何发送一个Ajax请求
2015/01/26 面试题
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
经济担保书范文
2014/04/02 职场文书
员工安全责任协议书
2016/03/22 职场文书
css让页脚保持在底部位置的四种方案
2022/07/23 HTML / CSS
苹果macOS 13开发者预览版Beta 8发布 正式版10月发布
2022/09/23 数码科技