提交表单html django

Posted

技术标签:

【中文标题】提交表单html django【英文标题】:submiting form html django 【发布时间】:2017-02-17 06:53:51 【问题描述】:

我想将数据从我的 html 提交发送到我的数据库(mysql)。 在服务器端,我使用 django(我是初学者)。 如果我在表“名称”“电子邮件”“消息”中使用 3 行,你能给我举个例子吗? 当有人按下提交时,我希望将数据存储在数据库中,而其他用户看不到它们。我已经阅读了 djangogirls 和 django 教程 1.10,并且我已经制作了一个 webapp。但是如果我想自己做某事,我会卡住。

我在 index.html 中的表单

 <form method="POST" class="post-form" action="/myapp/">% csrf_token %form
      <input class="form-control" id="name" name="name" placeholder="Name" type="text" required>
    </div>
    <div class="col-sm-6 form-group">
      <input class="form-control" id="email" name="email" placeholder="mail" type="email" required>
    </div>
  </div>
  <textarea class="form-control" id="message" name="message" placeholder="Comm" rows="5"></textarea><br>
  <div class="row">
    <div class="col-sm-12 form-group">
 form.as_p 
      <button class="btn btn-default pull-right" type="submit">Send</button>

    </form>

models.py

未来 导入 unicode_literals

从 django.db 导入模型

# Create your models here.
class bosti(models.Model):

   name = models.CharField(max_length = 50)
   email = models.CharField(max_length = 50)
   message = models.CharField(max_length = 50)

forms.py

from django import forms

from .models import bosti

class bosti(forms.ModelForm):

    class Meta:
        model = Post
        fields = ('id', 'name', 'email',' message')

myapp/urls.py

    from django.conf.urls import url
    from . import views
    urlpatterns = [
        url(r'^$', views.index, name='hello.html'),

]

mysite/urls.py

from django.conf.urls import url, include
from django.contrib import admin

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^myapp/', include('myapp.urls')),
    ]

当我提交表单时,我在我的 url 中获取值,但它们没有在 DB 中传递。

views.py

从 django.shortcuts 导入渲染 从.models导入bosti

在此处创建您的视图。

定义索引(请求): 返回渲染(请求,'blog/hello.html',)

def bosti(request,
    template = 'blog/hello.html', *args, **kwargs):
    if request.user.is_authenticated():
       name= request.GET.get('name')
       email= request.GET.get('email')
       message= request.GET.get('message')
       Model = bosti(name = name, email = email, message = message)

       Model.save()

我有模型 bosti。当我登录数据库时,我看到了新表 bosti_bosti。

settings.py

已安装的应用程序: 我添加了我的应用程序

数据库设置,我使用mysql

 DATABASES = 
        'default': 
            'ENGINE': 'django.db.backends.mysql',
            'NAME':'myDb',
            'USER': 'myuser',
            'PASSWORD': 'mypassword'


        
    

【问题讨论】:

你配置你的网址了吗?您必须为 '/myapp/' 的 url 定义一个视图。 您不必同时使用 django 表单和常规 html 表单来满足您的要求。随便一个就够了 【参考方案1】:
<form method="POST" class="post-form" action="/myapp/">
      <input class="form-control" id="name" name="name" placeholder="Name" type="text" required>
    </div>
    <div class="col-sm-6 form-group">
      <input class="form-control" id="email" name="email" placeholder="mail" type="email" required>
    </div>
  </div>
  <textarea class="form-control" id="message" name="message" placeholder="Comm" rows="5"></textarea><br>
  <div class="row">
    <div class="col-sm-12 form-group">
      <button class="btn btn-default pull-right" type="submit">Send</button>

    </form>

models.py

from future import unicode_literals

from django.db import models
# Create your models here.
class bosti(models.Model):

   name = models.CharField(max_length = 50)
   email = models.CharField(max_length = 50)
   message = models.CharField(max_length = 50)

forms.py

from django import forms

from .models import bosti

class bosti(forms.ModelForm):

    class Meta:
        model = Post
        fields = ('id', 'name', 'email',' message')

myapp/urls.py

    from django.conf.urls import url
    from . import views
    urlpatterns = [
        url(r'^$', views.index, name='hello.html'),

]

mysite/urls.py

from django.conf.urls import url, include
from django.contrib import admin

    urlpatterns = [
        url(r'^admin/', admin.site.urls),
        url(r'^myapp/', include('myapp.urls')),
    ]

当我提交表单时,我在我的 url 中获取值,但它们没有在 DB 中传递。

views.py

from django.shortcuts import render from .models import bosti

在此处创建您的视图。

def index(request): return render(request, 'blog/hello.html', )

def bosti(request,
    template = 'blog/hello.html', *args, **kwargs):
    if request.user.is_authenticated():
       name= request.GET.get('name')
       email= request.GET.get('email')
       message= request.GET.get('message')
       Model = bosti(name = name, email = email, message = message)

       Model.save()

将此选项添加到您的数据库设置中:

 DATABASES = 
        'default': 
            'ENGINE': 'django.db.backends.mysql',
            'NAME':'myDb',
            'USER': 'myuser',
            'PASSWORD': 'mypassword'
            'OPTIONS': 
                'sql_mode': 'traditional',
            


        
    

【讨论】:

嘿,谢谢。我试过了,仍然无法在mysql中获取数据。我在 url 中获取了我的变量,但似乎它们没有在我创建的模型的 db 中传递,但不确定我必须在 urls 中做什么(如果必须,不确定我缺少什么) 编辑并添加你的整个代码然后我可以得到一个更好的主意,否则我只是对你正在尝试做的事情做出假设。上面的代码将表单数据发送到数据库,它使用 *args 而不是参数。添加你的 models.py、view.py 和 urls.py 你能把你的view.py贴出来好吗? 改了表单,前面说了,Django表单和常规HTML表单都不需要了。 在那种情况下我可以删除forms.py吗?如果我没有正确的 url 配置,值仍然可以传递到我的数据库吗?我仍然无法获取数据。我无法在数据库中获取数据,我不知道从哪里开始查找:/ 感谢您帮助我

以上是关于提交表单html django的主要内容,如果未能解决你的问题,请参考以下文章

HTML表单提交到.HTML实例

Django,如何在提交表单时将 HTML 表单值传递给 URL?

提交表单html django

如何使用带有 html 的 Django 表单制作提交按钮

为啥django不处理PUT方法带过来的表单

提交时应该如何收集克隆的 Django 表单?