【发布时间】:2023-03-05 08:20:01
【问题描述】:
每次我单击 POST 表单上的提交按钮以上传 CSV 文件时。我得到一个代码 405 Method not allowed。我已经尝试更改其他导入方法,例如 django_import_export,但仍然得到相同的响应(405)。请帮忙!
这是我的views.py:
class AdvisoryView(TemplateView):
template_name = 'advisory.html'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["adv"] = Mobile.objects.all()
return context
def mobile_upload(request):
template = "advisory.html"
prompt = {
'order': 'blah'
}
if request.method == "GET":
return render(request, template, prompt)
csv_file = request.FILES('file')
if not csv_file.name.endswith('.csv'):
messages.error(request, 'This is not a csv file')
data_set = csv_file.read().decode('UTF-8')
io_string = io.StringIO(data_set)
next(io_string)
for column in csv.reader(io_string, delimiter=',', quotechar='|'):
_, created = Mobile.objects.update_or_create(
mobile_owner=column[0],
mobile_number=column[1],
)
context = {}
return render(request, template, prompt)
mobile.html 看起来像这样。我实际上将表单放在了模型表单中。
<div class="modal-body">
{% block content %}
<form method="POST" enctype="multipart/form-data">
{% csrf_token %}
<input type="file" name="file">
<p>Only accepts .csv file</p>
<button type="submit">Upload</button>
</form>
{% endblock content %}
</div>
<div class="modal-footer">
而 urls.py 是
from django.urls import path, include
from . import views
from .views import AdvisoryView, HomeView
urlpatterns = [
path('', HomeView.as_view(), name='home'),
path('advisory/', AdvisoryView.as_view(), name='advisory'),
]
【问题讨论】:
-
您能否发布您获得的完整错误回溯(用它编辑您的帖子)?
-
@KJTHoward,我被重定向到 此页面无法正常工作如果问题仍然存在,请联系网站所有者。 HTTP ERROR 405 点击提交后没有插入数据
-
如果您使用
$ python manage.py runserver 0:8090运行,您应该会在命令行上看到一些输出。你测试了吗? -
当我运行 $ python manage.py runserver 时,它响应 200 代码,但是当我执行插入表单时。命令行输出将是“POST /advisory/ HTTP/1.1” 405 0
-
好的,状态405是http协议的,所以你可能不会从python得到回溯。一件事让我感到困惑:您不应该在上传请求中使用
request.method == "GET":。在模板中,您有方法 POST。这在某种程度上不适合。通常不需要在渲染视图中区分请求方法