Python Django Form POST上不允许使用405方法

Python Django Form POST上不允许使用405方法,python,django,csv,Python,Django,Csv,每次我点击我的帖子表单上的提交按钮上传CSV文件。我得到一个不允许的代码405方法。我已经尝试过改变其他导入方法,比如django_import_export,但仍然得到了相同的响应(405)。请帮忙 这是my views.py: class AdvisoryView(TemplateView): template_name = 'advisory.html' def get_context_data(self, **kwargs): context = sup

每次我点击我的帖子表单上的提交按钮上传CSV文件。我得到一个不允许的代码405方法。我已经尝试过改变其他导入方法,比如django_import_export,但仍然得到了相同的响应(405)。请帮忙

这是my 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">

这个答案解释了为什么TemplateView中不允许POST。


你可能需要将你的功能
mobile\u upload
更改为
post

你可以发布你得到的完整错误回溯吗(用它编辑你的帖子)?@KJTHoward,我被重定向到一个新的页面。如果问题仍然存在,请联系网站所有者。HTTP错误405在我单击submit and no data insertedi后如果使用
$python manage.py runserver 0:8090运行,您应该会在命令行上看到一些输出。您测试过吗?当我运行$python manage.py runserver时,它会响应200个代码,但当我执行插入表单时。命令行输出将是“POST/advical/HTTP/1.1”405 0OK,状态405是HTTP协议,所以您可能不会从python获得回溯。有一件事让我很困惑:你不应该在上传请求中使用
request.method==“GET”:
。在模板中有方法POST。这不太合适。通常不需要在渲染视图中区分请求方法。我尝试了这个方法,现在我得到了
TypeError:post()接受1个位置参数,但有2个位置参数[12/Mar/2020 00:44:29]“post/advision/HTTP/1.1”500 78494
在类视图中使用post的格式是
def post(self,request)。您还应该考虑在帖子结束时重定向到成功或错误页面仍然不工作,IM获得<代码>多值ICT对象是不可调用的< /代码>错误。我真的被困在这里差不多4天了哈哈
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'),
]