首页 > 解决方案 > 我无法在 Django 中发送带有附件的表单

问题描述

我的表格有问题。我的网站上几乎没有,它们可以工作,但我有一个带有附件的表格,当我在网站上按“发送”时,什么也没发生(网站只是刷新)。那是立即执行的,所以我认为 Django 甚至不会尝试发送此表单。其次,如何设置格式文件仅适用于 jpg、png 和 pdf?

表格.py

class PayBackForm(forms.Form):
    subject = forms.CharField(required=True)
    signature_number = forms.CharField(required=True)
    email = forms.EmailField(required=False)
    file = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}))
    message = forms.CharField(widget=forms.Textarea, required=False)

视图.py

from aplikacja.settings import EMAIL_HOST_USER
from .models import News
from django.core.mail import send_mail, BadHeaderError
from django.http import HttpResponse
from django.shortcuts import render, redirect
from .forms import ContactFormForDebtor, ContactFormForClient, PayBackForm
from django.contrib import messages

...

from django.core.mail import EmailMessage
def splata(request):
if request.method == 'GET':
    form = PayBackForm()
else:
    form = PayBackForm(request.POST)
    if form.is_valid():
        messages.success(request, 'Form submission successful')
        subject = form.cleaned_data['subject']
        message = form.cleaned_data['message']
        email = form.cleaned_data['email']
        file = request.FILES['file']

        try:
            mail = EmailMessage(subject, message, EMAIL_HOST_USER, [email])
            mail.attach(file.name, file.read(), file.content_type)
            mail.send()
            return render(request, "splata.html", {'email_form': form, 'error_message': 'Sent email to %s'%email})

        except BadHeaderError:
            return render(request, "splata.html", {'email_form': form, 'error_message': 'Either the attachment is too big or corrupt'})

return render(request, "splata.html", {'form': form})

html

<form enctype="multipart/form-data" method="post">
                    {% csrf_token %}

                    {% if error_message %}
                    <div class="alert alert-primary" role="alert">
                        {{error_message}}
                    </div>
                    {% endif %}

                    <div class="form-group">
                        <input type="text" class="form-control" name="signature_number" id="signature_number"
                               placeholder="Sygnatura sprawy" required>
                    </div>
                    <div class="row">
                        <div class="col-md-6 form-group">
                            <input type="email" class="form-control" name="email" id="email" placeholder="Adres e-mail"
                                   data-rule="email" data-msg="Podaj prawidłowy e-mail">
                        </div>
                    </div>
                    <div class="form-group">
                        <input type="text" class="form-control" name="subject" id="subject" placeholder="Temat"
                               data-rule="minlen:4" data-msg="Pole musi zawierać przynajmniej 5 znaków" required>
                    </div>
                    <div class="form-group">
                        <textarea class="form-control" name="message" rows="5" data-rule="required"
                                  data-msg="Podaj treść wiadomości" placeholder="Wiadomość" required></textarea>
                    </div>

                    <div class="pt-2 form-group">
                        <input type="file" class="form-control" name="file" id="file" placeholder="Plik"
                               data-rule="file">
                    </div>

                    <div class="contact-button">
                        <button type="submit">Wyślij wiadomość</button>
                    </div>

</form>

标签: pythonpython-3.xdjango

解决方案


推荐阅读