2015-03-10 3 views
2

Я пытаюсь создать контактную форму, которая будет как электронная почта, так и сохранение сообщения. Я думаю, что у меня есть model.py, forms.py и admin.py права, и я могу создать и сохранить (а не отправить) сообщение от администратора. Но я борюсь с view.py, который должен как отправить по электронной почте, так и сохранить сообщение.Форма контакта Django с использованием ModelForm

model.py:

from django.db import models 
from django.contrib import admin 

class Contact(models.Model): 
    name = models.CharField(max_length=100) 
    email = models.EmailField() 
    message = models.TextField(max_length=10) 
    date_created = models.DateField(verbose_name="Created on date", auto_now_add="True") 

class ContactAdmin(admin.ModelAdmin): 
    list_display = ('name', 'email', 'message', 'date_created') 

forms.py:

from django import forms 
from .models import Contact 


class ContactForm(forms.Form): 
    name = forms.CharField() 
    email = forms.EmailField() 

Когда дело доходит до views.py, мне нужно некоторое руководство для того, чтобы собрать код для def contact(request):. Я думаю, что я должен включить эти модулей:

from django.conf import settings 
from django.shortcuts import render, HttpResponseRedirect, HttpResponse, Http404 
from django.core.mail import send_mail 
from .forms import ContactForm 
from .models import Contact 

Когда дело доходит до шаблона, то я не уверен в том, как использовать тег шаблона, чтобы сделать контактную форму в HTML.

Итак, мне нужна помощь, чтобы выяснить правильный вид и шаблон кода .. Я, конечно, открыт для предложений для остальной части коды, а также - Как вы могли догадаться, это мой первым реальный Приложение Django.

Спасибо!

ответ

2

Что-то вроде этого:


Я хотел бы использовать Джанго ModelForm для создания формы:

class ContactForm(forms.ModelForm): 

    class Meta: 
     model = Contact 
     exclude = ('date_created',) 

Docs: https://docs.djangoproject.com/en/1.7/topics/forms/modelforms/#modelform

И FormView за фактический вид:

from django.conf import settings 
from django.core.mail import send_mail 
from django.views.generic import FormView 

from .forms import ContactForm 

class ContactFormView(FormView): 

    form_class = ContactForm 
    template_name = "email_form.html" 
    success_url = '/email-sent/' 

    def form_valid(self, form): 
     message = "{name}/{email} said: ".format(
      name=form.cleaned_data.get('name'), 
      email=form.cleaned_data.get('email')) 
     message += "\n\n{0}".format(form.cleaned_data.get('message')) 
     send_mail(
      subject=form.cleaned_data.get('subject').strip(), 
      message=message, 
      from_email='[email protected]', 
      recipient_list=[settings.LIST_OF_EMAIL_RECIPIENTS], 
     ) 
     form.save() 
     return super(ContactFormView, self).form_valid(form) 

Docs: https://docs.djangoproject.com/en/1.7/ref/class-based-views/generic-editing/#formview

И ваш шаблон:

{% extends 'base.html' %} 
{% block title %}Send an email{% endblock %} 

{% block content %} 
    <div class="row"> 
     <div class="span6"> 
      <h1>Send an email</h1> 
      <form action="." method="post"> 
       {% csrf_token %} 
       {{ form }} 
       <input type="submit" value="Submit" /> 
      </form> 
     </div> 
    </div> 
{% endblock %} 

{% block extrajs %} 
<script src="{{ STATIC_URL }}js/jquery-1.7.1.min.js"></script> 
<script type="text/javascript"> 
$(function() { 
    $('#id_name').focus() 
}); 
</script> 
{% endblock %} 

Docs: https://docs.djangoproject.com/en/1.7/topics/forms/#the-template

Смежные вопросы