【问题标题】:Django form doesn't send POST request and site freezesDjango 表单不发送 POST 请求并且站点冻结
【发布时间】:2019-08-19 11:29:40
【问题描述】:

我正在尝试建立一个基本的论坛站点供我的同事使用。问题是当我尝试登录该站点时,没有发送 POST 请求(由终端显示)并且整个网站变得无响应。事实上,它位于另一个浏览器选项卡中,在我输入时无限缓冲。

我按照 Corey Schafer 的 Django 教程为网站打下了基础,因为我从来没有用 Django 做过任何事情。我完成了教程系列,并且该网站功能齐全(减去密码重置电子邮件)。完成教程后,我通过 django-taggit 在 post-form 中添加了标记功能。

我不得不等到 IT 负责人可以将一些文件输入公司网站才能访问电子邮件(通过 SendGrid),但我终于能够向自己发送一封密码重置电子邮件。我成功地重置了我的密码,这就是事情开始出错的地方。

我想改回我的密码,所以我再次完成了这个过程,但是这次当我按下密码重置页面上的“发送电子邮件”按钮时,缓冲图标(在 Chrome 上)开始倒退并不会停止。发生这种情况时,我没有检查我的控制台。无论哪种方式,我都试图通过单击导航栏上的链接转到网站上的其他地方,但所有链接都没有响应。刷新所做的只是清除表格。

现在,每次我尝试发送 POST 请求时,都会发生这种情况,并且整个站点都无法使用。我无法登录、发布、更改密码或创建帐户。

我已尝试通过清除浏览器缓存、刷新数据库并检查控制台以查看是否出现错误来解决此问题。控制台不显示任何错误。事实上,它只显示发送的最后一个 GET 请求。在登录的情况下,最后一个请求说:

[2019 年 8 月 19 日] "GET /login/ HTTP/1.1" 200 5214

请注意,我大约在这个时候尝试开始学习 SQL,并且我在同一台计算机上安装了 MySQL。会不会与被占用的端口有关?我正在处理 localhost:8000,如果有帮助的话。

我需要弄清楚为什么没有发送 POST 请求,但我不知道是什么导致了这个问题,因为没有错误或异常。

编辑 *忘记添加:

我也尝试过重新启动服务器并检查迁移,但这些操作都没有任何效果。我还尝试创建一个新用户,但又失败了。

我还打开了一个预先存在且正常运行的代码版本,但即使这样也失败了,所以这可能是硬件问题。

编辑#2:

这是登录页面的 HTML,我正在扩展一个不影响登录表单的基本 HTML 模板,并且我还按照 Corey Schafer 的教程使用 Crispy Forms。这是 HTML:


<div class='content-section'>
    <form method="POST">
        {% csrf_token %}
        <fieldset class="form-group">
            <legend class="border-bottom mb-4">
                Team Member Login
            </legend>
            {{ form|crispy }}
        </fieldset>

        <div class="form-group">

            <button class="btn btn-outline-info" type="submit">Log In</button>
            <small class="text-muted ml-2">
                <a href="{% url 'password_reset' %}">Forgot Password?</a>
            </small>

        </div>

    </form>

</div>

编辑#3:

这就是视图的配置方式...

path('login/',
     auth_views.LoginView.as_view(template_name='users/login.html'),
     name='login')

编辑#4:

我能够成功注册一个新用户,我什至能够从登录页面登录他们,但是在我再次尝试将他们注销并尝试重新登录后,问题再次出现。我的控制台有一个 POST 请求。 这是控制台输出:

System check identified no issues (0 silenced).
August 19, 2019 - 15:57:16
Django version 2.2.4, using settings 'django_project.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
[19/Aug/2019 15:57:24] "GET / HTTP/1.1" 200 3890
Not Found: /favicon.ico
[19/Aug/2019 15:57:26] "GET /favicon.ico HTTP/1.1" 404 5049
[19/Aug/2019 15:57:30] "GET /register/ HTTP/1.1" 200 6525
[19/Aug/2019 15:57:47] "POST /register/ HTTP/1.1" 302 0
[19/Aug/2019 15:57:47] "GET /login/ HTTP/1.1" 200 5389
[19/Aug/2019 15:57:54] "POST /login/ HTTP/1.1" 302 0
[19/Aug/2019 15:57:54] "GET / HTTP/1.1" 200 3979
[19/Aug/2019 15:57:59] "GET /profile/ HTTP/1.1" 200 5288
[19/Aug/2019 15:58:04] "GET /logout/ HTTP/1.1" 200 4055

【问题讨论】:

  • 您必须向我们展示一些代码,否则很难提供帮助。
  • 服务器日志中是否显示任何错误?
  • @Cleb,老实说,我不知道要显示什么代码。没有出现任何错误,并且该站点的结构中有多个文件和表单。我能想到的最好的补充是该站点与 Corey Schafer 的教程完全相同(youtube.com/…
  • @MaartenDev,我如何访问服务器日志?
  • 使用您的 chrome 开发工具(尤其是“网络”选项卡)确保这不是您的浏览器/计算机/dns 而不是您的 django 应用程序的问题。检查是否在此处发送 POST 请求。如果您的 django 控制台没有显示任何内容,那么它与您的 django 服务器无关,而是与您的计算机有关。

标签: python django


【解决方案1】:

您的表单未指定操作。因此,我假设在提交表单时,正在加载当前页面以处理表单提交。

如果您使用的是基于方法的视图

def viewHandle(request):
    if request.method == "POST":
       return something

如果您使用的是基于类的视图

class HomePage(View):
    def post(self, request):
        return something
    def get(self, request):
        return something

【讨论】:

  • 我使用的是 Django 包含的默认视图,或者我相信。我正在为其添加另一个编辑。
【解决方案2】:

在 Google Chrome 中发生,但在 Safari 中有效。因此,我检查了是否有待处理的 Chrome 更新。之后,它就像一个魅力。

【讨论】:

    【解决方案3】:

    嗯。我有一个类似的问题,Django 会挂在我所做的任何 POST 请求和随后的 GET 请求上。特别是在登录页面和管理员。浏览器只会说ERR_CONNECTION_REFUSEDERR_EMPTY_RESPONSE。事实证明,我在我的 Django 应用程序上启用了 redis 缓存,而 redis-server 没有打开。启动后,一切正常。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-29
      • 2020-05-11
      • 1970-01-01
      • 2015-09-20
      • 2013-07-11
      • 1970-01-01
      • 2020-10-28
      • 1970-01-01
      相关资源
      最近更新 更多