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 Django框架实现自定义表单提交
Mar 25 Python
Python编程之字符串模板(Template)用法实例分析
Jul 22 Python
用python标准库difflib比较两份文件的异同详解
Nov 16 Python
python实现一组典型数据格式转换
Dec 15 Python
Python OpenCV 使用滑动条来调整函数参数的方法
Jul 08 Python
Python 保持登录状态进行接口测试的方法示例
Aug 06 Python
python实现静态web服务器
Sep 03 Python
使用python脚本自动创建pip.ini配置文件代码实例
Sep 20 Python
Python3 A*寻路算法实现方式
Dec 24 Python
Selenium基于PIL实现拼接滚动截图
Apr 10 Python
Python+pyftpdlib实现局域网文件互传
Aug 24 Python
基于Python实现对比Exce的工具
Apr 07 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运行速度的一些小技巧分享
2012/07/03 PHP
详解php实现页面静态化原理
2017/06/21 PHP
Javascript常用运算符(Operators)-javascript基础教程
2007/12/14 Javascript
IE中createElement需要注意的一个问题
2010/07/13 Javascript
javascript小组件 原生table排序表格脚本(兼容ie firefox opera chrome)
2012/07/25 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
2013/04/23 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
js查找节点的方法小结
2015/01/13 Javascript
jQuery简单实现日历的方法
2015/05/04 Javascript
jQuery实现无限往下滚动效果代码
2016/04/16 Javascript
Extjs4.0 ComboBox如何实现三级联动
2016/05/11 Javascript
JavaScript实现简单的拖动效果
2016/07/02 Javascript
JS控制FileUpload的上传文件类型实例代码
2016/10/07 Javascript
完美解决jQuery fancybox ie 无法显示关闭按钮的问题
2016/11/29 Javascript
JavaScript学习笔记--常用的互动方法
2016/12/07 Javascript
Node.js的特点详解
2017/02/03 Javascript
详解Nodejs内存治理
2018/05/13 NodeJs
Vue 页面权限控制和登陆验证功能的实例代码
2019/06/20 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
浅析JS中NEW的实现原理及重写
2020/02/20 Javascript
小程序分享链接onShareAppMessage的具体用法
2020/05/22 Javascript
python多线程扫描端口示例
2014/01/16 Python
django实现用户登陆功能详解
2017/12/11 Python
python多线程调用exit无法退出的解决方法
2019/02/18 Python
详解python读取image
2019/04/03 Python
pandas读取CSV文件时查看修改各列的数据类型格式
2019/07/07 Python
如何利用Python开发一个简单的猜数字游戏
2019/09/22 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
Mansur Gavriel官网:纽约市的一个设计品牌
2019/05/02 全球购物
企业厂务公开实施方案
2014/03/26 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
redis使用不当导致应用卡死bug的过程解析
2021/07/01 Redis
详解Vue3使用axios的配置教程
2022/04/29 Vue.js
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python
字节飞书面试promise.all实现示例
2022/06/16 Javascript