如何解决如果包含输入类型文件,则Django表单返回404页面未找到
我正在使用Django == 2.1和Pillow == 7.1.2
当我以django格式包含<input type="file">
并将其发布时,找不到404页是我得到的错误。
我的模板包含以下形式:
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
{% if success %}
<p>Success</p>
{% endif %}
<input type="file" name="file">
<input type="submit">
</form>
views.py是:
from django.shortcuts import render
from myapp.models import Upload
def upload(request):
if request.method == "POST":
myfile = request.FILES.get('file')
upload = Upload(myfile=myfile)
upload.save()
data = {
'success': "Success"
}
return render(request,'file.html',data)
else:
return render(request,'file.html')
urls.py是:
from django.urls import path
from . import views
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
path('admin/',admin.site.urls),path('',views.upload,name="upload"),] + static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)
settings.py:
MEDIA_ROOT = '/my/path/to/media'
MEDIA_URL = '/media/'
该代码在localhost上工作正常,但是在CPanel共享托管上托管时出现错误。如果我删除<input type="file">
并尝试<input type="text">
,它将正常工作。另外,我的媒体文件只能正确发送,只有上传会引起问题
解决方法
在共享主机上部署django应用程序时,我也遇到过几次相同的错误。
在生产中,django不像在开发中那样直接提供静态文件和媒体文件。
选项一
如果您希望django直接提供媒体文件,请在生产服务器上使用pip install mod_wsgi
Follow the instructions here
选项二 例如使用AWS的存储桶存储,但是您可以通过创建公共github存储库使用github提供的免费存储,然后为其生成访问令牌。之后安装django-github-s3。 然后在您的settings.py中添加此代码
DEFAULT_FILE_STORAGE = "github_storages.backend.BackendStorages"
GITHUB_HANDLE = "your_github_username"
ACCESS_TOKEN = "access_token_generated"
GITHUB_REPO_NAME = "repo_name"
MEDIA_BUCKET_NAME = "media_folder"
**NB:** don't forget to add `'github_storages'` to your installed_apps
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。