Найти - Пользователи
Полная версия: Форма для отправки email
Начало » Django » Форма для отправки email
1 2
kozlo22
Не могу разобраться с тем, как отправлять email.
Есть такая страница. Там есть форма для отправки сообщения на email.

Вот мой код секции: с формой
<section id="contact">
        <div class="container">
            <div class="row">
                <div class="col-lg-12 text-center">
                    <h2>Contact Me</h2>
                    <hr class="star-primary">
                </div>
            </div>
         <div class="row">
                <div class="col-lg-8 col-lg-offset-2">
                    <form role="form" method="post" action=".">{% csrf_token %}
                        <div class="row">
                            <div class="form-group col-xs-12 floating-label-form-group">
                                <label for="name">Name</label>
                                <input class="form-control" type="text" name="name" placeholder="Name">
                            </div>
                        </div>
                        <div class="row">
                            <div class="form-group col-xs-12 floating-label-form-group">
                                <label for="email">Email Address</label>
                                <input class="form-control" type="email" name="email" placeholder="Email Address">
                            </div>
                        </div>
                        <div class="row">
                            <div class="form-group col-xs-12 floating-label-form-group">
                                <label for="message">Message</label>
                                <textarea placeholder="Message" class="form-control" rows="5"></textarea>
                            </div>
                        </div>
                        <br>
                        <div class="row">
                            <div class="form-group col-xs-12">
                                <button type="submit" class="btn btn-lg btn-success" value="Submit" />Send</button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </section>

В models.py:
class ContactForm(forms.Form):
    name = forms.CharField()
    subject = forms.CharField(max_length=100)
    sender = forms.EmailField()
    message = forms.CharField()
В views.py:
def contact(request):
	subject = request.POST.get('subject', '')
	message = request.POST.get('message', '')
	sender = request.POST.get('sender', '')
	if request.method == 'POST':
		form = ContactForm(request.POST)
		try:
			send_mail(subject, message, sender, ['kozlovsky.a.a@gmail.com'])
		except BadHeaderError:
			return HttpResponse('Invalid header found.')
	else:
		form = ContactForm()
	return render(request, 'index.html', {'form':form,})

В settings.py:
MAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
# Optional SMTP authentication information for EMAIL_HOST.
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_HOST_USER ='myemail@gmail.com'
EMAIL_HOST_PASSWORD = 'password'
EMAIL_PORT = 587
EMAIL_USE_TLS = True

Страница лежит в дирректории mysite/blog/templates/index.html
FishHook
В чем проблема то? Вы забыли рассказать, что именно не получается.
Судя по коду, работать он у Вас не будет ввиду того, что поля формы в шаблоне и в коде тупо не совпадают:
class ContactForm(forms.Form):
    name = forms.CharField()
    subject = forms.CharField(max_length=100)
    sender = forms.EmailField()
    message = forms.CharField()

<input class="form-control" type="text" name="name" placeholder="Name">
<input class="form-control" type="email" name="email" placeholder="Email Address">
<textarea placeholder="Message" class="form-control" rows="5"></textarea>


def contact(request):
	subject = request.POST.get('subject', '')  # Где оно в форме?
	message = request.POST.get('message', '') # Где оно в форме?
	sender = request.POST.get('sender', '') # Где оно в форме?
kozlo22
FishHook
проблема в том, что после нажатия на кнопку просто перезагружается страница, а в строке ввода адреса повляется строка с данными, которые были введены в форму.

Теперь так:
models.py
class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    sender = forms.EmailField()
    message = forms.CharField()

views.py
def contact(request):
	subject = request.POST.get('name', '')
	message = request.POST.get('message', '')
	sender = request.POST.get('email', '')
	if request.method == 'POST':
		form = ContactForm(request.POST)
		try:
			send_mail(subject, message, sender, ['yourmail@gmail.com'])
		except BadHeaderError:
			return HttpResponse('Invalid header found.')
	else:
		form = ContactForm()
	return render(request, 'index.html', {'form':form,})

Форма
<section id="contact">
        <div class="container">
            <div class="row">
                <div class="col-lg-12 text-center">
                    <h2>Contact Me</h2>
                    <hr class="star-primary">
                </div>
            </div>
         <div class="row">
                <div class="col-lg-8 col-lg-offset-2">
                    <form role="form">
                        <div class="row">
                            <div class="form-group col-xs-12 floating-label-form-group">
                                <label for="name">Name</label>
                                <input class="form-control" type="text" name="name" placeholder="Name">
                            </div>
                        </div>
                        <div class="row">
                            <div class="form-group col-xs-12 floating-label-form-group">
                                <label for="email">Email Address</label>
                                <input class="form-control" type="email" name="email" placeholder="Email Address">
                            </div>
                        </div>
                        <div class="row">
                            <div class="form-group col-xs-12 floating-label-form-group">
                                <label for="message">Message</label>
                                <textarea placeholder="Message" name="message" class="form-control" rows="5"></textarea>
                            </div>
                        </div>
                        <br>
                        <div class="row">
                            <div class="form-group col-xs-12">
                                <button type="submit" class="btn btn-lg btn-success" value="Submit" />Send</button>
                            </div>
                        </div>
                    </form>
                </div>
            </div>
        </div>
    </section>
inoks
 <form role="form" method='post'>
kozlo22
inoks
Я это уже прописывал. В таком случае в адресной строке появляется адрес домашней страницы, но страница не загружается.
FishHook
>>>if request.method == ‘POST’:

Ну дык по умолчанию формы гетом отправляют, а ты пост ждешь, нужно указать метод отправки данных.
<form method="post">{% csrf_token %} 
FishHook
kozlo22
но страница не загружается.
Нет такого понятия!!!!
Есть консоль в браузере. Посмотри, уходят данные или нет.
Посмотри ответ, который приходит на запрос.
Если ошибка на сервере, он тебе так или иначе вернет содержание ошибки.
Не бывает такого: “не загружается”. Ищи ошибку, она есть, её тебе озвучивают. Хотя бы стандартный F12 в хроме решит 98% проблем, а если юзать фаербаг, то ….
kozlo22
FishHook
405 ошибку (METHOD NOT ALLOWED) возвращает.
FishHook
Ну и где трейсбек?
Блин, ну ты ж вроде не маленький.
kozlo22
FishHook
Ну и где трейсбек?
Блин, ну ты ж вроде не маленький.
Вот. Да, я что-то очень морожу
Remote Address:127.0.0.1:8000
Request URL:http://localhost:8000/
Request Method:POST
Status Code:405 METHOD NOT ALLOWED
Request Headersview source
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip,deflate,sdch
Accept-Language:ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Cache-Control:max-age=0
Connection:keep-alive
Content-Length:101
Content-Type:application/x-www-form-urlencoded
Cookie:csrftoken=rSRd9t6oVIe6zeZc7nvtpMrsWDDe9nh3
Host:localhost:8000
Origin:http://localhost:8000
Referer:http://localhost:8000/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.114 Safari/537.36
Form Dataview sourceview URL encoded
csrfmiddlewaretoken:rSRd9t6oVIe6zeZc7nvtpMrsWDDe9nh3
name:adsad
email:some@gmail.com
message:asdsad
Response Headersview source
Allow:GET, HEAD, OPTIONS
Content-Type:text/html; charset=utf-8
Date:Mon, 07 Jul 2014 15:17:01 GMT
Server:WSGIServer/0.1 Python/2.7.6
X-Frame-Options:SAMEORIGIN
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB