Я следил за проектом новостной рассылки. Я получил ошибку 403 Forbidden. Она хранит данные, но как только я нажимаю кнопку подписки, она показывает эту ошибку, если я не удаляю response=sg.send(message)
и явно не отправляю почту. Но без этой строки приложение будет неполным.
проект / письмо / 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()})
проект / письмо / 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)"
проект / 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')
]
шаблоны / индекс. 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>