Python Django在/upload/上载文件时怀疑操作

Python Django在/upload/上载文件时怀疑操作,python,django,Python,Django,我正在django1.5和python2.7中开发一个项目。 上载文件Django时引发错误消息: 可疑操作在/upload/ 尝试访问“\static\file\test\u file.txt”被拒绝。 这是回溯: Environment: Request Method: POST Request URL: http://127.0.0.1:8000/upload/ Django Version: 1.5 Python Version: 2.7.6 Installed Applicati

我正在
django1.5
python2.7
中开发一个项目。 上载文件Django时引发错误消息:

可疑操作在/upload/

尝试访问“\static\file\test\u file.txt”被拒绝。

这是回溯:

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/upload/

Django Version: 1.5
Python Version: 2.7.6
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'django.contrib.admin',
 'app_is')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
  115.                         response = callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Adriano\Desktop\site_is\app_is\views.py" in upload_file
  81.             new_file.save()
File "C:\Python27\lib\site-packages\django\db\models\base.py" in save
  546.                        force_update=force_update, update_fields=update_fields)
File "C:\Python27\lib\site-packages\django\db\models\base.py" in save_base
  650.                 result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw)
File "C:\Python27\lib\site-packages\django\db\models\manager.py" in _insert
  215.         return insert_query(self.model, objs, fields, **kwargs)
File "C:\Python27\lib\site-packages\django\db\models\query.py" in insert_query
  1673.     return query.get_compiler(using=using).execute_sql(return_id)
File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py" in execute_sql
  936.         for sql, params in self.as_sql():
File "C:\Python27\lib\site-packages\django\db\models\sql\compiler.py" in as_sql
  894.                 for obj in self.query.objs
File "C:\Python27\lib\site-packages\django\db\models\fields\files.py" in pre_save
  250.             file.save(file.name, file, save=False)
File "C:\Python27\lib\site-packages\django\db\models\fields\files.py" in save
  86.         self.name = self.storage.save(name, content)
File "C:\Python27\lib\site-packages\django\core\files\storage.py" in save
  47.         name = self.get_available_name(name)
File "C:\Python27\lib\site-packages\django\core\files\storage.py" in get_available_name
  73.         while self.exists(name):
File "C:\Python27\lib\site-packages\django\core\files\storage.py" in exists
  243.         return os.path.exists(self.path(name))
File "C:\Python27\lib\site-packages\django\core\files\storage.py" in path
  259.             raise SuspiciousOperation("Attempted access to '%s' denied." % name)

Exception Type: SuspiciousOperation at /upload/
Exception Value: Attempted access to '\static\file\test_file.txt' denied.
这是HTML:

<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Upload">
    <input type="reset" value="Reset">
</form>
这是一种观点:

def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            new_file = File(file = request.FILES['file'])
            cd = form.cleaned_data
            new_file.name = cd['name']
            new_file.description = cd['description']
            new_file.school = cd['school']
            new_file.subject = cd['subject']
            new_file.price = cd['price']
            new_file.rating = '0.0'
            new_file.user = request.user
            new_file.save()
            form = Search()
            return render(request, 'home.html', {'form': form, 'request': request})
    else:
        form = UploadFileForm()
    return render(request, 'upload.html', {'form': form, 'request': request})
这是文件的模型:

class File(models.Model):
    middleschool = 'MS'
    highschool = 'HS'
    university = 'U'
    blank = '-'

school_choices = ((middleschool, 'Middle School'), (highschool, 'High school'), (university, 'University'), (blank, 'Not defined'),)

name = models.CharField(max_length = 30, primary_key=True, blank=False, null=False)
description = models.CharField(max_length = 140, blank=False, null=False)
school = models.CharField(max_length = 30, choices = school_choices, default = blank)
subject = models.ForeignKey(Subject)
user = models.ForeignKey(User)
rating = models.DecimalField(max_digits=2, decimal_places=0, default = 0)
price = models.DecimalField(max_digits=2, decimal_places=1, default = 0, blank=True, null=True)
file = models.FileField(upload_to= "/static/file/")
我的应用程序路径是:
C:/Users/User/Desktop/site\u is/app\u is/
,我希望这些文件保存在文件夹中:
C:/Users/User/Desktop/site\u is/app\u is/static/file/
。在my
Setting.py
I设置中:

MEDIA_ROOT = 'C:/Users/User/Desktop/site_is/app_is/static/file/'
MEDIA_URL = '/file/'
STATIC_ROOT = 'C:/Users/User/Desktop/site_is/app_is/static/'
STATIC_URL = '/static/'
由于我是Django的初学者,我担心我将媒体/静态根目录和/或url上传,这会导致出现错误


你知道如何解决这个问题吗?

问题在于你的模型中有这样一行:

file = models.FileField(upload_to= "/static/file/")
您正在传递一个绝对路径,这意味着“将其存储在C:\static\file\中”,它不是
媒体根目录的子目录。您可以将
upload\u to
参数更改为以
C:/Users/User/Desktop/site\u is/app\u is/static/file/
开头的绝对路径或相对路径:

file = models.FileField(upload_to= ".")

相关的由于
upload\u to
被附加到
media\u root
,并且从他想要保存文件的OP公式来看,似乎应该是
models.FileField(upload\u to=“.”
file = models.FileField(upload_to= ".")