我正在关注新闻通讯应用程序项目。我收到403禁止的错误。它正在存储数据,但是一旦我单击“订阅”按钮,它就会显示此错误,除非我删除response=sg.send(message)
并强迫发送邮件。
project / letter / views.py
def random_digits():
return "%0.12d" % random.randint(0, 999999999999)
@csrf_exempt
def new(request):
if request.method =='POST':
sub = Subscriber(email=request.POST['email'], conf_num=random_digits())
sub.save()
message = Mail(
from_email=settings.FROM_EMAIL,
to_emails= sub.email,
subject='Newsletter Confirmation',
html_content='Thank you for signing up for my email newsletter! \
Please complete the process by \
<a href="{}/confirm/?email={}&conf_num={}"> clicking here to \
confirm your registration</a>.'.format(request.build_absolute_uri('/confirm/'),
sub.email,
sub.conf_num))
sg = SendGridAPIClient(settings.SENDGRID_API_KEY)
response = sg.send(message)
return render(request, 'index.html', {'email': sub.email, 'action': 'added', 'form': SubscriberForm()})
else:
return render(request, 'index.html', {'form': SubscriberForm()})
project / letter / models.py
class Subscriber(models.Model):
email = models.EmailField(unique=True)
conf_num = models.CharField(max_length=15)
confirmed = models.BooleanField(default=False)
def __str__(self):
return self.email + " (" + ("not " if not self.confirmed else "") + "confirmed)"
project / urls.py
from django.contrib import admin
from django.urls import path
from letter import views
urlpatterns = [
path('admin/', admin.site.urls),
path('new/', views.new, name='new')
]
templates / index.html
<div class="container">
<div class="col-12">
<h1>Email Newsletter</h1>
</div>
<div class="col-12">
{% if email %}
<p>{{ email }} has been {{ action }}.</p>
{% endif %}
</div>
{% if form %}
<div class="col-12 col-md-4">
<form method="post" >
{% csrf_token %}
{{ form }}
<br>
<Input type="submit" class="btn btn-success" value="submit">Subscribe!
</form>
</div>
{% endif %}
</div>