首页 > 其他分享 >27、Django-文件上传

27、Django-文件上传

时间:2024-07-09 22:42:02浏览次数:3  
标签:文件 27 settings MEDIA Django file import 上传

上传规范:
1、文件上传必须为POST提交方式
2、表单'<form>'中文件上传时必须带有 enctype="multipart/form-data"时才会有包含文件内容的数据
3、表单中用<input type="file" name="xxx"> 标签上传文件


#在视图函数中
- 用request.FILES取文件框的内容
- file=request.FILES['xxx']

说明:
- FILES的key对应页面中file框的name值
- file绑定文件流对象
- file.name    可以取到文件名
- file.file    可以取到文件的字节流数据-具体的数据

配置文件的访问路径和存储路径:
- 在setting.py中设置MEDIA相关配置、Django把用户上传的文件统称为media资源
如:- MEDIA_URL = '/media/'
    - MEDIA_ROOT = os.path.join(BASE_DIR, 'media')    #要在项目下新建一个media目录
------------------------------------------------------------------------------------------
MEDIA_URL = '/media/'
MEDIA_ROOT = BASE_DIR / 'media'
--------------------------------------------------------------------------------------
    
#MEDIA_URL和MEDIA_ROOT需要手动绑定路由
- 在主路由中添加:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
---------------------------------------------------------------------------------------
#如:
from django.contrib import admin
from django.urls import path
from download_csv import views
from django.conf import settings
from django.conf.urls.static import static 

urlpatterns = [
    path('admin/', admin.site.urls),
    path('test_csv/', views.test_csv),
    path('upload_file/', views.upload_file),
]
# 配置静态文件、媒体文件
#settings.MEDIA_URL:媒体文件访问路径
#settings.MEDIA_ROOT:媒体文件保存路径
#static():将媒体文件映射到访问路径
#当文件上传到服务器时,会自动将文件保存到MEDIA_ROOT指定的路径下
#访问图片:http://127.0.0.1:8000/media/picture/111.png
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
----------------------------------------------------------------------------------------------

#说明:等价于做了MEDIA_URL开头的路由,Django接到该特征请求后去MEDIA_ROOT路径查找资源


views.py
-------------------------------------------------------------------------------------------------
from upload_app import models
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
#文件上传
def upload_file(request):
    if request.method == 'GET':
        return render(request, 'upload_file.html')

    elif request.method == 'POST':
        title = request.POST.get('title')
        file = request.FILES.get('file')

        #将上传的图片文件名和路径保存到数据库中
        models.Content.objects.create(title=title, picture=file)

        return HttpResponse('文件上传成功')
---------------------------------------------------------------------------------------------------------

upload_file.html
-----------------------------------------------------------------------------------------------------
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>文件上传</title>
</head>
<body>

{# enctype="multipart/form-data" 表示上传文件、分段式提交 #}
{% csrf_token %}
<form action="/upload_file/" method="post" enctype="multipart/form-data">
    <p>
        {# 输入文件名 #}
        <input type="text" name="title">
    </p>
    <p>
        {# 拿文件名 #}
        <input type="file" name="file">
    </p>
    <p>
        {# 提交 #}
        <input type="submit" value="上传">
    </p>

</form>

</body>
</html>
-------------------------------------------------------------------------------------------
models.py
------------------------------------------------------------------------------
from django.db import models

class Content(models.Model):

    title = models.CharField(verbose_name='标题', max_length=100)

    # 图片路径
    picture = models.FileField(upload_to='picture')
-----------------------------------------------------------------------------------

 

标签:文件,27,settings,MEDIA,Django,file,import,上传
From: https://www.cnblogs.com/littlecc/p/18205212

相关文章

  • 30、Django-项目部署-nginx
     原理: 安装: 配置:-这里uwsgi_pass表示使用uwsgi协议转发代理-include表示加载uwsgi协议的参数(固定)-nginx-t  #检查配置文件语法  修改uWSGI:  socket表示启用uwsgi协议      ......
  • Django学习第六天
     启动项目命令pythonmanage.pyrunserver取消模态框功能js实现列表数据删除第二种实现思路使用jquery修改模态框标题编辑页面拿到数据库数据显示默认数据功能实现想要去数据库中获取数据时:对象/字典三种不同的数据类型使用Ajax传入数据实现表单编辑,删除,修改......
  • 16、 Django-多表操作-多个模块的关联-一对一的增删改查- models.onetoone()
    一对一不是数据库的一个连表操作、而是Django独有的一个连表操作、一对一相当于是特殊的一对多的关系、只是相当于加了unique=True models.pyfromdjango.dbimportmodels#身份证classIDCard(models.Model):idcard_num=models.CharField(max_length=18,unique=......
  • 15、 Django-多表操作-多个模块的关联-多对多的增删改查- models.manytomany()
    针对多对多的关系django会自动创建第三张表、也可以通过through参数指定第三张表 models.pyfromdjango.dbimportmodels#Createyourmodelshere.#多对多#用户表:电影=N:M#一个用户可以收藏多部电影#一部电影可以被不同的用户收藏#电影classMovie(models.M......
  • 14、 Django-多表操作-多个模块的关联-一对多的增删改查- models.ForeignKey()
    #多模块关联--关联分类:Django中的三个函数--ForeignKey-称为外键:一对多、将字段定义在多的一端中--ManyToMnayField:多对多、将字段定义在两端的任意一端中--OneToOneField:一对一、将字段定义在任意一端中 如:一对一:一对多:多对多:常用......
  • 基于FileZilla上传、下载服务器数据的方法
      本文介绍FileZilla软件的下载、配置与使用方法。  在之前的博客中,我们提到了下载高分遥感影像数据需要用到FTP(文件传输协议,FileTransferProtocol)软件FileZilla;这一软件用以在自己的电脑与服务器之间相互传输数据,在进行下载科学数据、网站开发等等操作时,经常需要用到。本......
  • 上传excel到数据库
    上传excel到数据库:packagecom.wisdragon.controller.dataQuality;importcom.wisdragon.comm.constant.Constant;importcom.wisdragon.controller.common.BaseController;importcom.wisdragon.model.dataQuality.RuleBase;importcom.wisdragon.model.dataQuality.RuleV......
  • 【转】你了解 localhost 与 127.0.0.1 的区别吗?
    引言在信息技术的世界里,localhost和127.0.0.1频繁出现在各种网络及软件开发的场景之中。它们似乎指向同一个意义——那就是你的本地机器。但仔细探究之下,你会发现它们之间其实存在着一些微妙的差异。今天,我们就来深究这两者之间的区别,并揭示它们在实际应用中的重要性。基本概......
  • [1027] Convert the .py file to the .exe file without opening the Command Line Wi
    ref:Howtoremoveblackscreen(pythonconsole?)withPyQt5executable"C:\Users\User\AppData\Local\Programs\Python\Python311\Scripts\pyinstaller.exe"pipinstallpyinstallerpyinstaller--noconsole--onefilexyz1234.pyAh,PyIn......
  • POJ 3278 Catch That Cow
    题目链接:POJ3278【atchThatCow】思路    将起点放入队列,然后一次取出队列中的元素,对其进行左右移动和乘2的移动,并判断移动后的位置是否合法,合法则放入队列中继续操作。每次取出队列中的元素后,通过假设剩下的步骤全部是左右移动一格来更新结果。代码#include<io......