django - 权限错误 : [Errno 13] Permission denied: 'C:\\Users\\...\\AppData\\Local\\Temp\\tmp24xoaa7g'

标签 django python-3.x automated-tests temporary-files image-compression

我在测试临时图像和在models.py 中压缩图像时遇到了一个奇怪的问题。权限好像有问题:

ERROR: test_has_light_images (realestate.tests.test_view_listing.RealestateListingViewTest)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\Storm\Envs\btre\lib\site-packages\django\test\utils.py", line 373, in inner
    return func(*args, **kwargs)
  File "C:\Users\Storm\Dev\btre_project\realestate\tests\test_view_listing.py", line 72, in test_has_light_images
    create_listing(title='listing_sample', address='sample', realtor_num=1, city='sample', state='sample', zipcode='1234', price='555555', bedrooms='1', bathrooms='1', garage='1', sqft='123', lot_size='123', image_sample=image_sample.name)
  File "C:\Users\Storm\Dev\btre_project\realestate\tests\test_view_listing.py", line 37, in create_listing
    return Listing.objects.create(title=title, address=address, realtor=realtor, city=city, state=state, zipcode=zipcode, price=price, bedrooms=bedrooms, bathrooms=bathrooms, garage=garage, sqft=sqft, lot_size=lot_size, photo_main=image_sample, photo_1=image_sample, photo_2=image_sample, photo_3=image_sample, photo_4=image_sample, photo_5=image_sample, photo_6=image_sample)
  File "C:\Users\Storm\Envs\btre\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "C:\Users\Storm\Envs\btre\lib\site-packages\django\db\models\query.py", line 422, in create
    obj.save(force_insert=True, using=self.db)
  File "C:\Users\Storm\Dev\btre_project\realestate\models.py", line 69, in save
    new_image = compress(self.photo_main)
  File "C:\Users\Storm\Dev\btre_project\realestate\models.py", line 11, in compress
    im = Image.open(image)
  File "C:\Users\Storm\Envs\btre\lib\site-packages\PIL\Image.py", line 2774, in open
    fp.seek(0)
  File "C:\Users\Storm\Envs\btre\lib\site-packages\django\core\files\utils.py", line 20, in <lambda>
    seek = property(lambda self: self.file.seek)
  File "C:\Users\Storm\Envs\btre\lib\site-packages\django\db\models\fields\files.py", line 43, in _get_file
    self._file = self.storage.open(self.name, 'rb')
  File "C:\Users\Storm\Envs\btre\lib\site-packages\django\core\files\storage.py", line 36, in open
    return self._open(name, mode)
  File "C:\Users\Storm\Envs\btre\lib\site-packages\django\core\files\storage.py", line 224, in _open
    return File(open(self.path(name), mode))
PermissionError: [Errno 13] Permission denied: 'C:\\Users\\Storm\\AppData\\Local\\Temp\\tmp24xoaa7g'

测试.py
from django.test import TestCase
from django.urls import reverse, resolve
from django.utils import timezone
import datetime

from ..models import Listing

from django.test import override_settings
from PIL import Image
from io import BytesIO
import tempfile

def get_temporary_image(temp_file):
    size = (200, 200)
    color = (255, 0, 0, 0)
    image = Image.new("RGB", size, color)
    image.save(temp_file, 'jpeg')
    return temp_file

    @override_settings(MEDIA_ROOT=tempfile.gettempdir())
    def test_has_light_images(self):
        temp_file = tempfile.NamedTemporaryFile()
        image_sample = get_temporary_image(temp_file)
        Listing.objects.create(title='listing_sample', photo_main=image_sample.name)

模型.py
def compress(image):
    im = Image.open(image)
    im_io = BytesIO() 
    im.save(im_io, 'JPEG', quality=20, optimize=True)
    new_image = File(im_io, name=image.name)
    return new_image

class Listing(models.Model):
    title = models.CharField(max_length=200)
    photo_main = models.ImageField(upload_to='photos/%Y/%m/%d/')

    def save(self, *args, **kwargs):
        new_image = compress(self.photo_main)
        self.photo_main = new_image
        super().save(*args, **kwargs)

我尝试了另一种压缩图像的方法,使测试工作,但压缩图像不成功。

有谁知道这里发生了什么?

最佳答案

这发生在使用 Pycharm 的 Windows 机器上。

修复:Right-click您的 PyCharm 应用程序并将其作为 运行管理员 .

更新:
“从 Windows 开始菜单中右键单击 Pycharm 快捷方式并选择‘以管理员身份运行’。”

或者

更改要保存的目录的权限,使所有用户都具有读写权限。

关于django - 权限错误 : [Errno 13] Permission denied: 'C:\\Users\\...\\AppData\\Local\\Temp\\tmp24xoaa7g' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58653392/

相关文章:

python - 在 Mac 上将 Django 安装到 Python 3.3

python - 使用 modelformset_factory 时如何区分 django 中的表单集?

python-3.x - 选择从哪个目录运行 pytest

java - 使用 selenium 网络驱动程序验证错误消息

c# - 集成测试 Http 代理服务器

sql - 直接执行自定义 SQL 时,django-mssql 中的查询超时过期

python - 获取今天日期的所有对象,django

python - 如何按第二个值对列表进行排序?

python - 在 Jupyter Notebook 中导入期间找不到模块

testing - 我使用的测试技术有名称吗?