2
votes

I want to send data from my html submit for to my database(mysql). On server side i use django(im begginer). Can you give me example if i use 3 rows in my table "name" "email" "message". When someone press submit i want data to be stored in DB and other users cant see them. I have read djangogirls and django tutorial 1.10 and i already made an webapp. But im stuck if i want to do something on my own.

my form in 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

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')),
    ]

when i submit form, i get values in my url, but they arent passed in DB.

views.py

from django.shortcuts import render from .models import bosti

Create your views here.

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()

I have model bosti. When I login in db I see new table bosti_bosti.

settings.py

Installed apps: I added myapp

DB settings, im using mysql

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


        }
    }
1
Have you configured your urls? You have to define a view for the url that will be '/myapp/'.Harigovind R
You dont have to use both django form and conventional html form for your requirement. Any one would be enoughHarigovind R

1 Answers

0
votes
<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')),
    ]

when i submit form, i get values in my url, but they arent passed in DB.

views.py

from django.shortcuts import render from .models import bosti

Create your views here.

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()

Add this option to your Database settings:

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


        }
    }