【问题标题】:Django model works on local but not after deployDjango 模型在本地工作,但在部署后不工作
【发布时间】:2020-09-11 14:34:34
【问题描述】:

我正在制作一个简单的个人网站。我制作了一个框来输入用户数据(姓名、电子邮件和消息)。我希望将此数据发送给我的 django 管理员。我已经对其进行了测试,并且可以在本地使用。但是当我部署它时,每当我从盒子里提交时,我都没有得到任何数据。注意:出于某种原因,我不使用 django 形式。我想使用自己的自定义表单。

这是我的 views.py

from django.shortcuts import render
from django.http import HttpResponse
from .models import Feedback
from .forms import FeedbackForm

def index(request):
    if (request.method == "POST"):
        name = request.POST.get("Name")
        email = request.POST.get("Email")
        message = request.POST.get("Message")
        record = Feedback(name=name, email=email, message=message)
        record.save()          
    
    return render(request, 'main.html')

这是我的 models.py

from django.db import models

class Feedback(models.Model) :
        name = models.CharField(max_length=50)
        email = models.EmailField()
        message = models.CharField(max_length=200)

        def __str__(self):
            return self.name

这是我的 html 表单

  <form action="{% url 'index' %}" method="POST" target="_self">
        {% csrf_token %}
        <div class="w3-row-padding" style="margin:0 -16px 8px -16px">
          <div class="w3-half">
            <input class="w3-input w3-border" type="text" placeholder="Name" required name="Name" >
          </div>
          <div class="w3-half">
            <input class="w3-input w3-border" type="email" placeholder="Email" required name="Email">
          </div>
        </div>
        <input class="w3-input w3-border" type="text" placeholder="Message" required name="Message" >
        <button class="w3-button w3-black w3-right w3-section" type="submit">
          <i class="fa fa-paper-plane"></i> SEND MESSAGE
        </button>
      </form>

【问题讨论】:

  • 需要更多细节。请输入表格和阿明。没有错误吗?
  • 如果设置 DEBUG = True,它会抛出任何错误吗?项目部署在什么平台上?
  • 因为我没有使用 django 表单所以我不使用 forms.py。我只是在使用我的 html 表单@babakgholamirad
  • 没有发生错误。该应用程序适用于本地和部署@nightwolfgroup

标签: python django forms


【解决方案1】:

我不确定您在哪个平台上部署了该项目,但我会尝试的第一件事是确保您已运行数据库迁移。 (如果您可以访问管理区域,我假设您已经完成了这项工作,但可能值得再次运行以确保。)

python manage.py makemigrations
python manage.py migrate

我对您的 HTML 表单进行了一些修改,以更紧密地遵循 Django 文档。值得注意的是,在每个输入中添加了enctype="multipart/form-data" 和一个 id 标签:即id="name"。这是文档的链接:https://docs.djangoproject.com/en/3.1/topics/forms/

<form action="{% url 'index' %}" method="POST" enctype="multipart/form-data">
    {% csrf_token %}
    <div class="w3-row-padding" style="margin:0 -16px 8px -16px">
        <div class="w3-half">
            <input class="w3-input w3-border" type="text" placeholder="Name" name="Name" id="name" required>
        </div>
        <div class="w3-half">
            <input class="w3-input w3-border" type="email" placeholder="Email" name="Email" id="email" required>
        </div>
    </div>
    <input class="w3-input w3-border" type="text" placeholder="Message" name="Message" id="message" required>
    <button class="w3-button w3-black w3-right w3-section" type="submit"><i class="fa fa-paper-plane"></i>SEND MESSAGE</button>
</form>

这可能是复制/粘贴代码的问题,但我注意到模型上的字段过度缩进。确保在每个字段之前使用单个选项卡。

# models.py
class Feedback(models.Model):
    name = models.CharField(max_length=50)
    email = models.EmailField()
    message = models.CharField(max_length=200)

    def __str__(self):
        return self.name

如果您能够看到终端,您的 POST 请求是否收到 200 响应?它应该看起来像这样:

"POST / HTTP/1.1" 200

我要检查的另一件事是确保您的数据库在 settings.py 中正确配置(假设您使用的是 sqlite 数据库)

# settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

如果您在管理区域中没有看到任何内容,请确保您已在 admin.py 中注册您的模型

from django.contrib import admin
from .models import Feedback

admin.site.register(Feedback)

【讨论】:

  • 感谢您提供一些反馈。但问题还没有解决。部署应用程序后,我仍然无法从表单中获取数据。我还尝试将我的数据库从 sqlite3 更改为 postgres。而且还是不行
猜你喜欢
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 2018-12-31
  • 1970-01-01
  • 1970-01-01
  • 2021-05-22
  • 2020-09-24
  • 2021-06-28
相关资源
最近更新 更多