django ImageField 上传不了文件?

简介: 今天染念用python写了用户上传头像的功能,当测试api的时候,发现数据库存的路径有些不对劲,以及服务器也没有上传得到图片那么,我的代码是怎么样的呢?

今天染念用python写了用户上传头像的功能,当测试api的时候,发现数据库存的路径有些不对劲,以及服务器也没有上传得到图片

那么,我的代码是怎么样的呢?

User.objects.filter(uid=uid).update(avatar=avatar)

而改成

user_data = User.objects.get(uid=uid)
user_data.avatar = avatar
user_data.save()

惊奇的发现

  • 会自动保存文件路径到数据库
  • 会自动保存文件到指定路径
  • 必要时会自动创建目录。

在stackoverflow找到这样的文章

也就是说使用save,如果某些模型具有重写的保存方法,则必须避免使用update,或者找到另一种方法对该重写的方法执行任何操作方法(因此你去百度的时候,就会看到django上传图片的两种写法,有些人会在视图层写with文件的写入,这是因为他们使用update

但不能完全否认update,毕竟批量更新数据挺香的,并且没有把对象加到内存中,也因此只有更新数据的作用把

What happens when you save?¶ When you save an object, Django performs

the following steps:

Emit a pre-save signal. The pre_save signal is sent, allowing any

functions listening for that signal to do something.

Preprocess the data. Each field's pre_save() method is called to

perform any automated data modification that's needed. For example,

the date/time fields override to implement auto_now_add and

auto_now.pre_save()

Prepare the data for the database. Each field's get_db_prep_save()

method is asked to provide its current value in a data type that can

be written to the database.

Most fields don't require data preparation. Simple data types, such as

integers and strings, are 'ready to write' as a Python object.

However, more complex data types often require some modification.

For example, DateField fields use a Python object to store data.

Databases don't store objects, so the field value must be converted

into an ISO-compliant date string for insertion into the

database.datetimedatetime

Insert the data into the database. The preprocessed, prepared data is

composed into an SQL statement for insertion into the database.

Emit a post-save signal. The post_save signal is sent, allowing any

functions listening for that signal to do something.

这是摘抄官方文档的说明,同样说了save会调用其他方法

目录
相关文章
|
中间件 关系型数据库 Shell
Django容易被遗忘却无比重要的框架默认文件介绍及使用方法
Django容易被遗忘却无比重要的框架默认文件介绍及使用方法
69 0
|
2月前
|
Python
django下载文件4-4|
django下载文件4-4|
|
3月前
|
前端开发 JavaScript Linux
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
【Azure 应用服务】在Azure App Service for Linux环境中,部署的Django应用,出现加载css、js等静态资源文件失败
|
6月前
|
存储 数据库 Python
Django教程第6章 | web开发实战-文件上传(导入文件、上传图片)
web应用实战:导入文件解析到DB,上传图片【2月更文挑战第25天】
91 0
Django教程第6章 | web开发实战-文件上传(导入文件、上传图片)
|
11月前
|
存储 前端开发 API
django 不使用imagefield 实现多图上传(大容量图片2.5MB以上)
因为某些原因,不想使用imagefield字段,而是将上传的所有图片地址统一返回前端 之前在 如何使用pathlib优雅地抛弃open写入 更新时间:2021-04-29 09:00:04 一文中提出了这样的方法,但是今天前端的朋友给我反馈
40 0
|
Python
完美解决Django项目生成的requirements.txt文件不能使用的问题
总所周知:部署Django项目时需要用到一个名为requirements.txt的文件,里面是各种各样本项目所需要的环境依赖,线上需要解析该文件并下载对应环境。
303 0
|
JavaScript 数据处理 Python
Django文件导入实现方案
Django文件导入实现方案
93 0
|
中间件 数据库 Python
【Django知识补充 - 1】:admin站点和rest_framework实现文件的上传和下载
【Django知识补充 - 1】:admin站点和rest_framework实现文件的上传和下载
299 0
【Django知识补充 - 1】:admin站点和rest_framework实现文件的上传和下载
|
Python
Django BBS项目 models.py 文件
Django BBS项目 models.py 文件
109 0