python - 我无法在 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>
解决方案
推荐阅读
- .net-core - 重复的“System.Reflection.AssemblyCompanyAttribute”属性 (CS0579)
- java - 在 Android Studio 中使用警报管理器设置多个警报会导致问题
- machine-learning - 准确度值在训练过程中上下波动
- cassandra - 如何在单个 Cassandra 语句中进行一系列选择、更新和插入原子操作?
- javascript - 将 Azure 事件中心数据提供给 ReactJS
- c++ - 对于注入指向类的指针还是指向其相关成员的指针更好,是否有经验法则?
- ios - VLCMediaPlayer initWithLibrary 不起作用
- database - ASP .NET Core:获取用户 IP 地址
- php - 限制星期几和时间 am pm 的预订
- spring-boot - Spring Cloud Config Client 不适用于 Spring Boot 2.5.1