为了账号安全,请及时绑定邮箱和手机立即绑定

Django 无法搜索“不允许的方法”

Django 无法搜索“不允许的方法”

三国纷争 2024-01-15 15:33:46
我是 Django 新手,目前正在为我的朋友做一个网站。他希望我制作一个系统,用户可以在其中搜索数据库,网站根据序列号提供相关项目。我按照以下网站的教程进行操作:https://learndjango.com/tutorials/django-search-tutorial来了解如何进行数据库搜索,这很有帮助,但我仍然遇到问题:我的搜索栏有效,并且结果页面也可以工作,但只有当我自己在搜索栏上手动输入查询时才有效(例如 results/?q=number1)。但是,当我使用输入栏和提交按钮进行搜索时,它会将我发送到 /results/ 页面,并且该页面给出以下内容:该页面无法正常工作如果问题仍然存在,请联系网站所有者。HTTP 错误 405-当我打开 pycharm 查看终端中的错误时,它显示:Method Not Allowed (POST): /result/Method Not Allowed: /result/[27/Oct/2020 20:06:02] "POST /result/ HTTP/1.1" 405 0这是我的代码(python3.7,pycharm)网站/网址:from . import viewsfrom django.urls import pathfrom django.contrib.auth import views as auth_viewsurlpatterns = [    path('register/',views.UserFormView.as_view(), name='register'),    path('login/', auth_views.LoginView.as_view(), name='login'),    path('', views.IndexViews.as_view(), name='index'),    path('scan/', views.ScanView.as_view(), name='scan'),    path('result/', views.SearchResultsView.as_view(), name='result'),]网站/浏览量:class IndexViews(generic.ListView):    template_name = "websites/index.html"    context_object_name = "object_list"    def get_queryset(self):        return Website.objects.all()class ScanView(TemplateView):    form_class = SerialFrom    template_name = 'websites/scan.html'class SearchResultsView(ListView):    model = SerialNumber    template_name = 'websites/result.html'    def get_queryset(self):  # new        query = self.request.GET.get('q')        context = self.get_context_data(object=self.object)        object_list = SerialNumber.objects.filter(            Q(number__iexact=query)        )        return object_list扫描.html: {% extends 'websites/base.html' %}{% block albums_active %}active{% endblock %}{% block body %}<head>    <meta charset="UTF-8">    <title>Scan</title>    <link rel="stylesheet" href="style.css"></head>感谢您花时间阅读,请帮助我,我真的需要这样做。
查看完整描述

1 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

默认情况下, [ ListViewDjango-doc]不会实现 POST 请求的处理程序。搜索通常通过 GET 请求完成,因此您应该使用:

<form class="box" action="{% url 'result' %}" method="GET">

    <h1>Product Check</h1>

    <p> Please enter the serial id of your product to check it.</p>

    <input type="text" name="q" placeholder="Serial Number">

    <input type="submit" placeholder="Check">

</form>

此外<input type="submit">不应该有name="q"属性。

您还可以将文本框的类型更改为type="search"[mozilla] :

<form class="box" action="{% url 'result' %}" method="GET">

    <h1>Product Check</h1>

    <p> Please enter the serial id of your product to check it.</p>

    <input type="search" name="q" placeholder="Serial Number">

    <input type="submit" placeholder="Check">

</form>


查看完整回答
反对 回复 2024-01-15
  • 1 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信