ARST打卡第104周[104/521]

Algorithm

LeetCode/554_砖墙

Review

TED:在互联网中解放自己

互联网让我们很容易找到和我们观点相同的观点,从而会很容易让我们的思维变得固化僵硬,甚至变得偏激

所以我们需要自己人为的去保持自己的互联网关注的东西多样化,去关注你对立观点中被世人称赞的观点,去思考求证,去保持开放

Tips

Django Template双重嵌套遍历字典嵌字典:Need 2 values to unpack in for loop; got 6.

解决方案

不能仅使用Dict对象来获取信息,可能Dict对象里面有6个字段
然后应该使用Dict对象的 items 属性来获取key和value

1
{% for person, query_pics in data.person_list.items %}

Share-Django如何创建一个文件并将其保存到模型的FileField中

model定义

1
2
3
4
5
6
7
8
9
class Result(models.Model):
name = models.CharField(max_length=100)
file = models.FileField(max_length=255)
project_name = models.CharField(max_length=100, default='未命名工程')
# 视频封面,容许为空
cover = models.ImageField(upload_to='cover/', blank=True, null=True)

def __str__(self):
return self.name

详细接口

基本上,一个字段被声明为一个FileField,当被访问时,给你一个类的实例FieldFile,它给你几个方法来与底层文件进行交互。所以,你需要做的是:

self.file.save(new_name, new_contents)
new_name你希望分配的文件名在哪里,并且new_contents是文件的内容。

注意,new_contents必须是二者之一的一个实例django.core.files.Filedjango.core.files.base.ContentFile(见给出的链接手册的细节)。这两个选择归结为:

1
2
3
4
5
# Using File
f = open('/path/to/file')
self.file.save(new_name, File(f))
# Using ContentFile
self.file.save(new_name, ContentFile('A string with the file content'))

仍可能遇到问题

UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0x89 in position 0: invalid start byte

搜了一下发现,直接修改一下open为rb就行

最终的views.py中的处理函数

1
2
3
4
5
6
7
8
f = File(open(
'/root/graduate_work/web_my/videoproject/media/iron_man_stack.png', 'rb'))
tmp_result = Result.objects.create(
file=None,
name=f.name,
project_name=project_context['project'].name)
project_context['project'].result = tmp_result
project_context['project'].result.file.save("iron_man_stack.png", (f))

参考文件

https://cloud.tencent.com/developer/ask/84584
https://docs.djangoproject.com/zh-hans/3.1/ref/models/fields/#django.db.models.FileField
https://stackoverflow.com/questions/42339876/error-unicodedecodeerror-utf-8-codec-cant-decode-byte-0xff-in-position-0-in