目前正在尝试使用django 2.2和MailChimp制作电子邮件时事通讯。 我从youtube视频中获取了代码,我想我已经卸载了,但后来我遇到了标题中的错误。 我尝试过各种方法,比如在subscribe函数中传递data=data,但没有任何效果。让我担心的是,它在视频中运行得很好,而且因为它不老,我不认为django已经发生了显著的变化。 如有任何帮助/解释,将不胜感激
views.py(并非所有导入)
from django.conf import settings
from .forms import EmailSignupForm
from django.http import HttpResponseRedirect
import json
import requests
MAILCHIMP_API_KEY = settings.MAILCHIMP_API_KEY
MAILCHIMP_DATA_CENTER = settings.MAILCHIMP_DATA_CENTER
MAILCHIMP_EMAIL_LIST_ID = settings.MAILCHIMP_EMAIL_LIST_ID
api_url = 'https://{dc}.api.mailchimp.com/3.0'.format(dc=MAILCHIMP_DATA_CENTER)
members_endpoint = '{api_url}/lists/{list_id}/members'.format(
api_url=api_url,
list_id=MAILCHIMP_EMAIL_LIST_ID
)
def subscribe(email):
data = {
"email_address": email,
"status": "subscribed",
}
print(data)
print(data[])
r = requests.post(
members_endpoint,
auth=("", MAILCHIMP_API_KEY),
data=json.dumps(data), # I think the error is caused here
)
return r.status_code, r.json()
def email_list_signup(request):
form = EmailSignupForm(request.POST or None)
if request.method == "POST":
if form.is_valid():
email_signup_qs = Signup.objects.filter(email=form.instance.email)
if email_signup_qs.exists():
messages.info(request, "You are already subscribed")
else:
subscribe(form.instance.email)
messages.success(request, "You have subscribed successfully!")
form.save()
return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
class HomeView(ListView):
template_name = "home.html"
model = Post
form_class=EmailSignupForm
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
form = EmailSignupForm()
context['form'] = form
return context
def get_queryset(self):
return Post.objects.all().order_by('-published_date')[:5]
url.py
from . import views
from django.conf.urls import url
urlpatterns = [
url(r'^email-signup$', views.subscribe,name="email-signup"),
]
forms.py
class EmailSignupForm(forms.ModelForm):
email = forms.EmailField(widget=forms.TextInput(attrs={
"type": "email",
"name": "email",
"id": "email",
"placeholder": "Type your email address",
}), label="")
class Meta:
model = Signup
fields = ('email', )
home.html中的表单
{% block emailsignup %}
<div class="enter_email sidebar_element">
<p class="white">Get all new posts E-Mailed to you! No Ads, we promise.</p>
<form class="form " method='GET' action="{% url 'blog:email-signup' %}">
{% csrf_token %}
<!-- <input class="form-control " type="text" placeholder="Your email" name="email"> -->
{{ form }}
<button method="POST" class="btn btn-primary w-100 my-3" type="submit">Enter</button>
</form>
</div>
{% endblock %}
如果有任何代码丢失,请告诉我, 非常感谢你的帮助
我解决了。 主要的事情是改变HTML中的表单。按照建议跟踪函数调用后,我发现甚至没有调用subscribe函数。我调查发现我的表单使用的是“GET”而不是“POST”方法。action属性中的url是正确的,但是按钮也有方法post,我删除了它(不知道是否有必要)。 然后,我将url.py中的url更改为路径,这不应该有什么区别,但我想在较新的django版本中是一个很好的做法。 我还向表单添加了enctype=“multipart/form data”,根据我的测试,这是不必要的。 因此,最终文件将是:
在home.html中的表单:
url.py:
视图.py:
没有再次提及的其他文件保持不变。 谢谢你帮了大家
相关问题 更多 >
编程相关推荐