所以我想使用 Django 编写一个网站,任何人都可以申请成为
agents
的 company
。要申请,他们需要填写一份表格,上传简历,然后邮寄给人力资源部。现在我的代码似乎没有采用 pdf
,因为它在点击提交后返回 none
。而且邮件也没有发送出去。我怎样才能解决这个问题?预先感谢!
我的html:
<form method="POST" action="{% url 'apply' %}" class="row" enctype="multipart/form-data">
{% csrf_token %}
<div class="mb-3 col-lg-6">
<input type="text" class="form-control" placeholder="Name" name ="name">
</div>
<div class="mb-3 col-lg-6">
<input type="text" class="form-control" placeholder="Email Address" name ="email">
</div>
<div class="mb-3 col-lg-6">
<input type="text" class="form-control" placeholder="Subject" name ="subject">
</div>
<div class="mb-3 col-lg-6">
<input type="text" class="form-control" placeholder="Phone" name ="phone">
</div>
<div class="mb-3 col-lg-6">
<input id="CV" type="file" class="form-control" placeholder="CV" name ="CV" aria-label="CV">
</div>
<div class="mb-3 col-lg-6">
<input type="text" class="form-control" placeholder="Address" name ="address">
</div>
<div class="mb-3 col-lg-12">
<textarea name id cols="30" rows="5" class="form-control" name ="cover_letter" placeholder="Cover Letter..."></textarea>
</div>
<div class="mb-3 col-lg-12">
<input type="submit" class="btn btn-primary" value="Apply">
</div>
</form>
我的观点.py:
def apply(request):
if request.method == "POST":
name = request.POST['name']
email = request.POST['email']
subject = request.POST['subject']
phone = request.POST['phone']
CV = request.POST.get('CV')
address = request.POST['address']
cover_letter = request.POST.get('cover_letter')
application = "Name: " + name + " " + "Phone: " + phone + " " + "Email: " + email + " " + "Address: " + address + " " + "Subject: " + subject
send_mail(
'Application of ' + name,
application,
CV,
cover_letter,
email,
['[email protected]'],
)
return render(request, 'users/apply.html', {
'name' : name,
'email' : email,
'phone' : phone,
'address' : address,
'subject' : subject,
'cover_letter' : cover_letter,
'CV' : CV,
})
else:
return render(request, 'blog/index.html', {})
我的设置.py:
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
在 Django 中,上传的文件是通过
request.FILES
访问的,而不是 request.POST。因此,您应该使用 request.FILES.get('CV')
检索上传的文件。
您与
send_mail
使用的参数似乎不正确。 send_mail
本身不支持使用您提供的参数将文件作为附件发送。要发送带有附件的电子邮件,您应该使用 EmailMessage
类。
以下是调整视图的方法。py:
from django.core.mail import EmailMessage
from django.conf import settings
def apply(request):
if request.method == "POST":
name = request.POST['name']
email = request.POST['email']
subject = request.POST['subject']
phone = request.POST['phone']
address = request.POST['address']
cover_letter = request.POST.get('cover_letter')
cv_file = request.FILES.get('CV')
application = f"Name: {name}\nPhone: {phone}\nEmail: {email}\nAddress: {address}\nSubject: {subject}\nCover Letter: {cover_letter}"
email_message = EmailMessage(
f'Application from {name}',
application,
settings.DEFAULT_FROM_EMAIL,
['[email protected]'],
)
# Attach the CV if it exists
if cv_file:
email_message.attach(cv_file.name, cv_file.read(), cv_file.content_type)
email_message.send()
return render(request, 'users/apply.html', {
'name': name,
'email': email,
'phone': phone,
'address': address,
'subject': subject,
'cover_letter': cover_letter,
'CV': cv_file,
})
else:
return render(request, 'blog/index.html', {})