Уведомления

Группа в Telegram: @pythonsu

#1 Июль 4, 2014 20:14:30

kozlo22
От: Беларусь, Минск
Зарегистрирован: 2012-11-01
Сообщения: 115
Репутация: +  0  -
Профиль   Отправить e-mail  

Форма для отправки email

Не могу разобраться с тем, как отправлять 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

Офлайн

#2 Июль 7, 2014 05:56:26

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Форма для отправки email

В чем проблема то? Вы забыли рассказать, что именно не получается.
Судя по коду, работать он у Вас не будет ввиду того, что поля формы в шаблоне и в коде тупо не совпадают:

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', '') # Где оно в форме?



Офлайн

#3 Июль 7, 2014 15:33:25

kozlo22
От: Беларусь, Минск
Зарегистрирован: 2012-11-01
Сообщения: 115
Репутация: +  0  -
Профиль   Отправить e-mail  

Форма для отправки email

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>

Отредактировано kozlo22 (Июль 7, 2014 15:36:53)

Офлайн

#4 Июль 7, 2014 15:55:49

inoks
От: Russia
Зарегистрирован: 2012-12-11
Сообщения: 343
Репутация: +  35  -
Профиль   Адрес электронной почты  

Форма для отправки email

 <form role="form" method='post'>

Офлайн

#5 Июль 7, 2014 16:04:00

kozlo22
От: Беларусь, Минск
Зарегистрирован: 2012-11-01
Сообщения: 115
Репутация: +  0  -
Профиль   Отправить e-mail  

Форма для отправки email

inoks
Я это уже прописывал. В таком случае в адресной строке появляется адрес домашней страницы, но страница не загружается.

Офлайн

#6 Июль 7, 2014 16:44:54

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Форма для отправки email

>>>if request.method == ‘POST’:

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

<form method="post">{% csrf_token %} 



Отредактировано FishHook (Июль 7, 2014 16:45:43)

Офлайн

#7 Июль 7, 2014 16:50:42

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Форма для отправки email

kozlo22
но страница не загружается.
Нет такого понятия!!!!
Есть консоль в браузере. Посмотри, уходят данные или нет.
Посмотри ответ, который приходит на запрос.
Если ошибка на сервере, он тебе так или иначе вернет содержание ошибки.
Не бывает такого: “не загружается”. Ищи ошибку, она есть, её тебе озвучивают. Хотя бы стандартный F12 в хроме решит 98% проблем, а если юзать фаербаг, то ….



Офлайн

#8 Июль 7, 2014 17:59:51

kozlo22
От: Беларусь, Минск
Зарегистрирован: 2012-11-01
Сообщения: 115
Репутация: +  0  -
Профиль   Отправить e-mail  

Форма для отправки email

FishHook
405 ошибку (METHOD NOT ALLOWED) возвращает.

Офлайн

#9 Июль 7, 2014 18:09:57

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Форма для отправки email

Ну и где трейсбек?
Блин, ну ты ж вроде не маленький.



Офлайн

#10 Июль 7, 2014 18:19:01

kozlo22
От: Беларусь, Минск
Зарегистрирован: 2012-11-01
Сообщения: 115
Репутация: +  0  -
Профиль   Отправить e-mail  

Форма для отправки email

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

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version