Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 6, 2017 11:50:42

vitt44
Зарегистрирован: 2017-06-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка файла через форму на почту

Всем привет!
Есть такая проблема:
В форме есть поле добавления файла. Добавляем файл, отправляем письмо –> на почту все что нужно приходит. Но проблема в том, что если не добавить файл, то ничего не приходит )

Сама форма:

 class FileForm(forms.Form):
    f_name = forms.CharField(required=True, max_length=50)
    f_mail = forms.EmailField(required=True)
    f_message = forms.CharField(required=True, max_length=500)
    f_file = forms.FileField(widget = forms.FileInput)
    f_news = forms.BooleanField(required=False)

Представление:
 if request.method == 'POST':
        file_form = FileForm(request.POST, request.FILES)
        if file_form.is_valid():
            f_name = file_form.cleaned_data['f_name']
            f_mail = file_form.cleaned_data['f_mail']
            f_message = file_form.cleaned_data['f_message']
            f_news = file_form.cleaned_data['f_news']
            f_file = request.FILES['f_file']
            news = ''
            if f_news:
                news = 'Посетитель дал согласие на получение новостей'
            from_email = '###############'
            to_email = ['###########', ]
            subject = 'Страничная форма'
            full_message = "От %s ( %s ) %s. Сообщение: %s" %(f_name, f_mail, news, f_message)
            try:
                mail = EmailMessage(subject, full_message, from_email, to_email)
                if not f_file == None:  # Попытка проверки, но результата не дало
                    mail.attach(f_file.name, f_file.read(), f_file.content_type)
                mail.send()
            except:
                return HttpResponse('Invalid mail send!')
            return redirect(index)
    else:
        file_form = FileForm()

Кусок шаблона:
 <div class="block_left">
{% if file_form.is_multipart %}
  <form class="form_question" role="form" method="post" action=" " enctype="multipart/form-data">
{% else %}
  <form class="form_question" role="form" method="post" action=" ">
{% endif %}
{% csrf_token %}
    <div class="row_block">
      <label for="f_name">
        <span class="form_title">Ваше имя</span>
      <input type="text" name="f_name" placeholder="Имя" required /></label>
        <span class="name_text">######################</span>
    </div>
  <div class="row_block">
    <label for="f_mail">
      <span class="form_title">Почта</span>
    <input type="text" name="f_mail" placeholder="Email" required /></label>
    <span class="upload_wrapper">
      <div class="fileform">
        <div class="selectbutton">Прикрепить файл</div>
	  <input id="upload" type="file" name="f_file" />
      </div>
    </span>
  </div>
  <div class="row_block">
    <label for="f_message">
      <span class="form_title">Вопрос</span>
      <textarea name="f_message" id="textform" cols="30" rows="4"></textarea>
    </label>
    <span class="wrapper_checkbox">
      <input type="checkbox" name="f_news" id="checkbox" value="a1" checked />
      <label for="checkbox"></label>
      <strong>Подписаться на новости и акции</strong>
      <input type="submit" value="Отправить" id="button_submit">
    </span>
  </div>
</form>
</div>

Убирал из формы шаблона:
<input id=“upload” type=“file” name=“f_file” /> (Так как по идее is_multipart обращает внимание type=“file” и соответственно выводит enctype=“multipart/form-data”)
И оставлял только: <form class=“form_question” role=“form” method=“post” action=“ ”> . Но отправка не происходит. Проверял это дело для того, что если бы без этих элементов заработало, то можно было бы задачу переложить на JS (при клике на див/кнопке добавления файла —> добавляются элементы input и enctype). Значит собака зарыта во вьюхе.

Подскажите как решить проблему

Отредактировано vitt44 (Июнь 6, 2017 13:25:21)

Офлайн

#2 Июнь 6, 2017 12:26:38

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Отправка файла через форму на почту

vitt44
Сома форма:
чето сомеваюсь что это форма сома, но на всякий случай выложите еще метод is_valid() формы сома.

 f_file = forms.forms.FileField(widget = forms.FileInput)
и вот тут вы уверены что должно быть forms.forms.? МБ вы просто неудачно скопипастили?



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июнь 6, 2017 12:29:39)

Офлайн

#3 Июнь 6, 2017 12:41:14

vitt44
Зарегистрирован: 2017-06-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка файла через форму на почту

PEHDOM
и вот тут вы уверены что должно быть forms.forms.?

Опечатка здесь была. Подправил. Не в этом проблема )

PEHDOM
чето сомеваюсь что это форма сома, но на всякий случай выложите еще метод is_valid() формы сома.

Чего-то не понял, что имеете ввиду )

Офлайн

#4 Июнь 6, 2017 12:54:54

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

Отправка файла через форму на почту

vitt44
Чего-то не понял, что имеете ввиду )
Вам мягко намекают, что неплохо бы выучить русский язык перед тем как осваивать какие-то другие.



Офлайн

#5 Июнь 6, 2017 13:26:38

vitt44
Зарегистрирован: 2017-06-06
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Отправка файла через форму на почту

FishHook
Вам мягко намекают, что неплохо бы выучить русский язык перед тем как осваивать какие-то другие.
Вот нет чтобы по делу ответить …

Офлайн

#6 Июнь 6, 2017 13:28:15

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Отправка файла через форму на почту

vitt44
Чего-то не понял, что имеете ввиду )
сом это рыба такая.
+ смотрите у вас почта отправится если :
1. if request.method == ‘POST’: это условие выполняеться иначе вообще бы ничего не отправлялось никогда
2. if file_form.is_valid(): вернет True, что оно там проверяет мы не знаем, нужно посмотреть МБ оно проверет наличие аттача.
3. Ссработает написаное в секиции try: Иначе бы оно возвращало ‘Invalid mail send!’ . Я так понимаю оно не возвращает Invalid mail send! ? Если нет тогда остаеться проверять пункт 2.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Июнь 6, 2017 13:30:50)

Офлайн

#7 Июнь 6, 2017 13:56:30

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

Отправка файла через форму на почту

vitt44
Вот нет чтобы по делу ответить …
Я прямо и по делу ответил на ваш вопрос.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version