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的设计模式编程入门指南
Apr 02 Python
Python3写入文件常用方法实例分析
May 22 Python
Python中文竖排显示的方法
Jul 28 Python
基于Python3 逗号代码 和 字符图网格(详谈)
Jun 22 Python
利用信号如何监控Django模型对象字段值的变化详解
Nov 27 Python
Python实现的简单读写csv文件操作示例
Jul 12 Python
pygame游戏之旅 添加游戏介绍
Nov 20 Python
Python通过for循环理解迭代器和生成器实例详解
Feb 16 Python
python-序列解包(对可迭代元素的快速取值方法)
Aug 24 Python
python多环境切换及pyenv使用过程详解
Sep 27 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
Pytorch distributed 多卡并行载入模型操作
Jun 05 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操作XML作为数据库的类
2010/12/19 PHP
Mac OS下配置PHP+MySql环境
2015/02/25 PHP
php提交post数组参数实例分析
2015/12/17 PHP
PHP几个实用自定义函数小结
2016/01/25 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
JS 控件事件小结
2012/10/31 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
JavaScript实现基于十进制的四舍五入实例
2015/07/17 Javascript
jquery实现全屏滚动
2015/12/28 Javascript
json格式的javascript对象用法分析
2016/07/04 Javascript
jQuery Validate 数组 全部验证问题
2017/01/12 Javascript
jQuery实现的分页功能示例
2017/01/22 Javascript
Angular4如何自定义首屏的加载动画详解
2017/07/26 Javascript
gulp教程_从入门到项目中快速上手使用方法
2017/09/14 Javascript
electron制作仿制qq聊天界面的示例代码
2018/11/26 Javascript
js array数组对象操作方法汇总
2019/03/18 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
pandas将numpy数组写入到csv的实例
2018/07/04 Python
Python计算开方、立方、圆周率,精确到小数点后任意位的方法
2018/07/17 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
python使用多线程+socket实现端口扫描
2020/05/28 Python
CSS3+js实现简单的时钟特效
2015/03/18 HTML / CSS
利用 CSS3 实现的无缝轮播功能代码
2017/09/25 HTML / CSS
请写出char *p与"零值"比较的if语句
2014/09/24 面试题
数控技术与应用毕业生自荐信
2013/09/24 职场文书
小学生自我鉴定
2013/10/12 职场文书
《我要的是葫芦》教学反思
2014/02/23 职场文书
招聘专员岗位职责
2014/03/07 职场文书
周年庆促销方案
2014/03/15 职场文书
竞选生活委员演讲稿
2014/04/28 职场文书
销售开票员岗位职责
2015/04/15 职场文书
2015年乡镇统计工作总结
2015/04/22 职场文书
理想国读书笔记
2015/06/25 职场文书
大学生暑期实践报告之企业经营管理
2019/08/08 职场文书
Golang 语言控制并发 Goroutine的方法
2021/06/30 Golang