【问题标题】:'Save html form data in database' django'将 html 表单数据保存在数据库中' django
【发布时间】:2019-07-31 10:27:23
【问题描述】:

我正在尝试在 postgres 数据库中使用 django 保存来自 HTML 的名称和电子邮件,在操作标记中,提到了函数名称,但使用该函数时,django 正在将该数据传递到具有相同函数名称的新页面

HTML

<form class="newsletter_form d-flex flex-md-row flex-column align-items-start justify-content-between"  action="subscribe" method="post">
                                {%csrf_token%}
                                <div class="d-flex flex-md-row flex-column align-items-start justify-content-between">
                                    <div>
                                        <input name="subname" type="text" class="newsletter_input newsletter_input_name" id="newsletter_input_name" placeholder="Name" required="required">
                                        <div class="input_border"></div>
                                    </div>
                                    <div>
                                        <input name="subemail" type="email" class="newsletter_input newsletter_input_email" id="newsletter_input_email" placeholder="Your e-mail" required="required">
                                        <div class="input_border"></div>
                                    </div>
                                </div>
                                <div><button type="submit" class="newsletter_button">subscribe</button></div>
</form>

views.py

def subscribe(request):
    if request.method == 'POST':
        subname = request.POST['subname']
        subemail = request.POST['subemail']

        sub = User.objects.create_user(subname=subname, subemail=subemail)
        sub.save();

        return redirect('/')
    else:
        return redirect('/')

url.py

from django.urls import path
from . import views

urlpatterns = [
    path("register", views.register, name='register'),
    path("login", views.login, name='login'),
    path("logout", views.logout, name='logout'),
    path("subscribe", views.subscribe, name='subscribe')
    ]

这是错误

【问题讨论】:

  • 您必须在模板中使用{% url 'subscribe' %} 提供操作
  • 与登录和注册页面相同的事情我没有使用 {% url 'login' %}
  • 如果您使用 django 默认用户模型登录/注册,那么您不必提供 action.django 自己处理。
  • @user11418935 当我使用 action="{% url 'subscribe' %}" imgur.com/a/IrflF98 时出现此错误
  • 为什么不尝试使用 django 提供的ModelForm ??

标签: django forms django-forms


【解决方案1】:

首先,您没有使用redirect('/') 进行重定向,因为当您重定向时,您应该使用您在urls.py 中分配的名称,即path("register", views.register, name='register'),,这里的名称是注册

然后在views.py:

def subscribe(request):
    if request.method == 'POST':
        subname = request.POST['subname']
        subemail = request.POST['subemail']

        sub = User.objects.create_user(subname=subname, subemail=subemail)

        return redirect('subscribe')
    else:
        return redirect('home')

我编辑的是:

  • 删除了sub.save(),因为那只在 django 表单中使用。

关于导致 404 的订阅 url 是您没有渲染单个模板,订阅功能应该如何工作?

在订阅函数末尾调用render()函数

和简单的建议,在每个 url 模式的末尾添加一个斜杠,即path("register/", views.register, name='register'), :) 这是可取的

【讨论】:

  • 订阅表单在 index.html 上,我在 ``` def home(request): dests = Destination.objects.all() return render(request, 'index.html' , {'cities': dests}) ```
  • 那根本不可能,在subscribe.html 中制作表单并在subscribe 函数中呈现此html,或者,在home 函数中执行上述过程。我推荐第一个,在home 函数中做这样的事情并不好。除非您想在所有页面中制作表单,否则在这种情况下 django forms 将帮助您而不是手动制作表单
  • 我不希望我的网站像这样工作 [link]imgur.com/a/WoUGgeJ[link] 这部分将在网站的末尾
  • 图片不可用
  • 谢谢解决了我的问题,我在主应用程序中移动了函数,而且最大的错误是,我使用用户对象保存在非用户表中。
猜你喜欢
  • 2020-10-07
  • 2016-08-09
  • 2017-03-06
  • 2018-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
相关资源
最近更新 更多