首页 > 解决方案 > '将 html 表单数据保存在数据库中' django

问题描述

我正在尝试通过在 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>

视图.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('/')

网址.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')
    ]

这是错误

在此处输入图像描述

标签: djangoformsdjango-forms

解决方案


首先,您没有使用重定向,redirect('/')因为当您重定向时,您应该使用您分配的名称,urls.pypath("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'),:) 这是可取的


推荐阅读