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正则表达式教程之三:贪婪/非贪婪特性
Mar 02 Python
Django自定义插件实现网站登录验证码功能
Apr 19 Python
Python实现上下班抢个顺风单脚本
Feb 07 Python
Python pyinotify日志监控系统处理日志的方法
Mar 08 Python
Python 输入一个数字判断成绩分数等级的方法
Nov 15 Python
python之Flask实现简单登录功能的示例代码
Dec 24 Python
python使用Pandas库提升项目的运行速度过程详解
Jul 12 Python
Python3网络爬虫开发实战之极验滑动验证码的识别
Aug 02 Python
pytorch中tensor.expand()和tensor.expand_as()函数详解
Dec 27 Python
django中嵌套的try-except实例
May 21 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
Sep 26 Python
python 单机五子棋对战游戏
Apr 28 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 实用代码收集
2010/01/22 PHP
深入PHP autoload机制的详解
2013/06/09 PHP
php解析xml提示Invalid byte 1 of 1-byte UTF-8 sequence错误的处理方法
2013/11/14 PHP
9段PHP实用功能的代码推荐
2014/10/14 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
PHP反射原理与用法深入分析
2019/09/28 PHP
Prototype使用指南之string.js
2007/01/10 Javascript
Cookie 注入是怎样产生的
2009/04/08 Javascript
firefo xml 读写实现js代码
2009/06/11 Javascript
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
js中哈希表的几种用法总结
2014/01/28 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
jQuery选择器用法实例详解
2015/12/17 Javascript
javascript实现计时器的简单方法
2016/02/21 Javascript
js获取当前年月日-YYYYmmDD格式的实现代码
2016/06/01 Javascript
简单易懂的天气插件(代码分享)
2017/02/04 Javascript
详解Sea.js中Module.exports和exports的区别
2017/02/12 Javascript
基于Vue实现页面切换左右滑动效果
2020/06/29 Javascript
快速解决vue-cli不能初始化webpack模板的问题
2018/03/20 Javascript
通过vue-router懒加载解决首次加载时资源过多导致的速度缓慢问题
2018/04/08 Javascript
Node.js利用console输出日志文件的方法示例
2018/04/27 Javascript
200行HTML+JavaScript实现年会抽奖程序
2019/01/22 Javascript
uni-app如何页面传参数的几种方法总结
2020/04/28 Javascript
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
详解用Python练习画个美队盾牌
2019/03/23 Python
django 信号调度机制详解
2019/07/19 Python
Canvas实现放大镜效果完整案例分析(附代码)
2020/11/26 HTML / CSS
小学生自我评价范例
2013/09/24 职场文书
小学数学课题方案
2014/06/15 职场文书
创先争优演讲稿
2014/09/15 职场文书
欢迎家长标语
2014/10/08 职场文书
政风行风自查自纠报告
2014/10/21 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
优秀的商业计划书,让融资一步到位
2019/05/07 职场文书
python 调用js的四种方式
2021/04/11 Python