django上传文件注意事项

简介: 本文介绍文件上传的完整实现流程:前端form需设置POST、multipart/form-data及file类型input;后端通过request.FILES获取文件流并保存;配置MEDIA路径与路由;models.py中定义自定义上传路径函数,实现文件命名与存储管理。

一、前端HTML:

1、form中必须为POST方式method="post"

<form method="post"...

2、form中必须有enctype="multipart/form-data"

<form enctype="multipart/form-data"...

3、表单input type必须为filetype="file"

<form action="/pic/upload/" method="post" enctype="multipart/form-data">
    {% csrf_token %}
    <p><lable>标题:</lable><input type="text" name="title"></p>
    <p><lable>选择图片:</lable><input type="file" name="myfile"></p>
    <p><input type="submit" value="提交"></p>
</form>

二、后端views视图:

  • 取文件框里的数据:request.FILES方法
  • file绑定文件流对象
  • file.name文件名
  • file.file 文件的字节流数据
def order_upload(request):
    if request.method == "GET":
        return render(request,'order_upload.html')
    elif request.method == "POST":
        title = request.POST.get('title')
        myfile = request.FILES.get('myfile')
        models.upload_content.objects.create(title=title,picture=myfile)
        return HttpResponse('--upload is ok--')

三、路由配置

1、在主路由urls.py最后添加:

from django.urls import path,
from django.conf import settings
from django.conf.urls.static import static

urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

2、在settings.py中添加用户上传资源路径为media:

MEDIA_ROOT = os.path.join(BASE_DIR, "media")
MEDIA_URL = "/media/"

3、项目根目录手动创建media文件夹


四、models.py中:

def user_directory_path(instance, filename):
    """自定义文件名的函数"""
    # 文件将被保存的路径和文件名,例如:uploads/2023/04/12/example_20230412153045.jpg
    ext = filename.split('.')[-1]
    filename = f"{os.path.splitext(filename)[0]}_{datetime.datetime.now().strftime('%Y%m%d%H%M%S')}.{ext}"
    # 路径可以包含子目录来组织文件,例如按年份或月份分文件夹
    return os.path.join('uploads', datetime.datetime.now().strftime('%Y/%m/%d'), filename)

class upload_content(models.Model):
    """M层upload_to=user_directory_path"""
    title = models.CharField(verbose_name="文件标题",max_length=200)
    picture = models.FileField(upload_to=user_directory_path)


目录
相关文章
|
27天前
|
存储 分布式计算 API
什么是批处理?批处理系统是怎么运转的?
本文深入浅出地解析批处理:它并非“老古董”,而是支撑报表生成、推荐系统、银行结算等关键业务的底层引擎。文章厘清其“积攒+批量执行”的本质,详解调度、计算、存储、容错四大核心组件,并以FineDataLink为例,展示如何通过可视化编排、内嵌Spark、多源接入与API发布,让批处理更高效、易用。
|
27天前
|
安全 API iOS开发
《iOS沙盒Python适配进阶指南:从静态兼容到自适应运行体系》
本文聚焦iOS沙盒环境下Python适配的核心技术要点,从沙盒与Python动态特性的底层冲突切入,剖析了解释器与系统内核适配断层、扩展模块框架化约束、标准库隐性缺失、原生应用交互壁垒等核心限制。结合实际开发思考,提出静态编译重构、功能等效重构、语义对齐桥接层搭建等针对性应对策略,同时阐述了解释器定制化与系统规则适配双向优化的长期演进思路,为开发者提供了从底层原理到实战落地的完整适配逻辑,助力实现Python在iOS沙盒中的稳定兼容与自适应运行。
|
1月前
html TABLE表格边框
本代码段为HTML样式设置,用于定义表格外观:边框合并、灰色边框线及外边距,确保表格呈现简洁规整的传统风格布局。
74 6
|
12月前
|
弹性计算 Ubuntu Linux
一键部署OpenWebUI+Ollama到阿里云ECS,轻松运行DeepSeek!(保姆级教程)
在当今数据驱动的时代,快速部署和管理大模型成为企业的关键需求。阿里云提供了一键部署OpenWebUI+Ollama的便捷方案,支持本地大模型运行和管理。用户也可以选择连接阿里云百炼的在线模型。
一键部署OpenWebUI+Ollama到阿里云ECS,轻松运行DeepSeek!(保姆级教程)
|
Ubuntu API 网络虚拟化
ubuntu22 编译安装docker,和docker容器方式安装 deepseek
本脚本适用于Ubuntu 22.04,主要功能包括编译安装Docker和安装DeepSeek模型。首先通过Apt源配置安装Docker,确保网络稳定(建议使用VPN)。接着下载并配置Docker二进制文件,创建Docker用户组并设置守护进程。随后拉取Debian 12镜像,安装系统必备工具,配置Ollama模型管理器,并最终部署和运行DeepSeek模型,提供API接口进行交互测试。
1457 15
|
数据安全/隐私保护 Python
python学习十一:python常用模块使用,如 加密模块pyarmor,时间模块time等
这篇文章介绍了Python中两个常用模块的使用:加密模块pyarmor用于保护代码,以及时间模块time用于处理时间相关的功能。
751 0
|
安全 数据安全/隐私保护 开发者
如何使用Pyarmor保护你的Python脚本
如何使用Pyarmor保护你的Python脚本
962 0
|
SQL 关系型数据库 MySQL
django(五)连接mysql
我正在参加「掘金·启航计划」 Django 默认支持的数据库是sqlite,但是正常我们使用的是mysql,因此我们需要修改一下他的默认配置。 首先,放一下我们的项目根目录结构:
408 0
|
编解码 缓存 前端开发
从零打造一个Web地图引擎
从零打造一个Web地图引擎
1077 0
从零打造一个Web地图引擎

热门文章

最新文章