gpt4 book ai didi

Django 文件上传

转载 作者:行者123 更新时间:2023-12-04 14:05:41 24 4
gpt4 key购买 nike

这是 View 中的代码:

def index(request):
if request.method == 'POST':
a=request.POST
# logging.debug(a["title"])
# logging.debug(a["file"])
#form = UploadFileForm()
form = UploadFileForm(request.POST, request.FILES)
#handle_uploaded_file(request.FILES['file'])
if form.is_valid():
handle_uploaded_file(request.FILES['file'])
return HttpResponseRedirect('/')
else:
form = UploadFileForm()
return render('upload.html', {'form': form})


def handle_uploaded_file(file):
# logging.debug("upload_here")
if file:
destination = open('/tmp/'+file.name, 'wb+')
#destination = open('/tmp', 'wb+')
for chunk in file.chunks():
destination.write(chunk)
destination.close()

这是模型中的代码:
class UploadFileForm(forms.Form):
title = forms.CharField(max_length=50)
file = forms.FileField(type="file")

这是upload.html中的代码:
{% block upload %}

<form enctype="multipart/form-data" method="post" action="/upload/">

{% csrf_token %}
<table>
<tr><td>
<input type="file" value="title" name="title" id="title" /><br />
<input type="submit" value="Submit" id="Save"/>
</td></tr>
</table>
</form>
{% endblock %}

我选择一个文件后,然后按提交按钮,出现错误:

/upload/处的属性错误

'WSGIRequest' 对象没有属性 'chunks'

请求方式:POST
请求网址: http://www.mywebsite.com/upload/
Django 版本:1.3
异常类型:属性错误
异常值:

'WSGIRequest' 对象没有属性 'chunks'

异常位置:/usr/src/wpcms/views.py in handle_uploaded_file, line 63

任何想法我在这里做错了什么?我忘记设置行了吗?或者,进口线?
谢谢你。

settings.py 是:
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)

MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'cms.middleware.page.CurrentPageMiddleware',
'cms.middleware.user.CurrentUserMiddleware',
'cms.middleware.toolbar.ToolbarMiddleware',
'cms.middleware.media.PlaceholderMediaMiddleware',
'django.middleware.doc.XViewMiddleware',
'django_authopenid.middleware.OpenIDMiddleware',
)

TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.request',
'django.core.context_processors.media',
'cms.context_processors.media',
'django_authopenid.context_processors.authopenid',
)

CMS_TEMPLATES = (
# ('basic.html', 'Basic Template'),
# ('template_1.html', 'Template One'),
# ('template_2.html', 'Template Two'),
('home.html', gettext('Default')),
('about.html', gettext('About')),
# ('blog.html', gettext('blog')),
('contact.html', gettext('Contact')),
)

ROOT_URLCONF = 'urls'

CMS_APPLICATIONS_URLS = (
('cmsplugin_news.urls', 'News'),
)

CMS_NAVIGATION_EXTENDERS = (
('cmsplugin_news.navigation.get_nodes', 'News navigation'),
)

THUMBNAIL_PROCESSORS = (
'easy_thumbnails.processors.colorspace',
'easy_thumbnails.processors.autocrop',
#'easy_thumbnails.processors.scale_and_crop',
'filer.thumbnail_processors.scale_and_crop_with_subject_location',
'easy_thumbnails.processors.filters',
)

CMS_MODERATOR = False

TEMPLATE_DIRS = (
os.path.join(PROJECT_DIR, 'templates'),
)

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.admin',
'django.contrib.comments',
'registration',
'django_authopenid',
'cms',
'menus',
'mptt',
'appmedia',
'south',
'cms.plugins.text',
'cms.plugins.picture',
'cms.plugins.link',
'cms.plugins.file',
'easy_thumbnails',
'filer',
'cmsplugin_filer_file',
'cmsplugin_filer_folder',
'cmsplugin_filer_image',
'cmsplugin_filer_teaser',
'cmsplugin_filer_video',
'cms.plugins.snippet',
'cms.plugins.googlemap',
'publisher',
'reversion',
'cms.plugins.teaser',
'cms.plugins.video',
'cms.plugins.twitter',
'cmsplugin_facebook',
'cmsplugin_news',
'cmsplugin_comments',
'captcha',
)

最佳答案

有多个问题。这是一个有效的固定版本:

1) 更改您的模板以使用实际表单:

<form enctype="multipart/form-data" method="post" action="/upload/">
{% csrf_token %}
<table>
{{form.as_table}}
</table>
<input type="submit" value="Submit" id="Save"/>
</form>

2) 更新您的表单以删除 FileField 中不必要的类型:
class UploadFileForm(forms.Form):
title = forms.CharField(max_length=50)
file = forms.FileField()

3) 更新您的 View 以添加 CSRF:
def index(request):
if request.method == 'POST':
a=request.POST
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
handle_uploaded_file(request.FILES['file'])
return HttpResponseRedirect('/')
else:
form = UploadFileForm()

c = {'form': form}
c.update(csrf(request))
return render_to_response('upload.html', c)

希望这可以帮助!

关于Django 文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5582516/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com