我创建了一个Django视图和一个随附的url。我试图让这个视图接受一个POST参数,但这个东西不起作用。它是我设置为向移动设备发送推送通知的自定义应用的一部分。
我的views.py是:
class DeviceCreateView(FormView):
model = DeviceObj
form_class = DeviceForm
template_name = "deviceobj_form.html"
def form_valid(self, form):
if self.request.method == 'POST':
reg_id = self.request.POST.get("registration_id")
DeviceObj.objects.create(registration_id=reg_id)
我的urls.py是:
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^$', home, name='home'),
url(r'^registration_id/$', DeviceCreateView.as_view(), name='registration_id'),
url(r'^success/$', success, name='success'),
]
我的模板是:
<form method="POST" action="{% url 'registration_id' %}">
{% csrf_token %}
<input type="hidden" name="registration_id" value="{{ registration_id }}">
</form>
我在Mozilla上使用POSTER加载项尝试向上面的排列发送POST参数。我POST到http://www.fakeurl.com/registration_id,将参数名称设置为“registration_id”,然后给它一个示例值(例如“testing123”)。作为回应,我获得200状态,具有以下转储:
<form method="POST" action="/registration_id/">
<input type='hidden' name='csrfmiddlewaretoken' value='PAPSwkpe1rU9c9ln4Jz0i6QKeyT57Cdf' />
<input type="hidden" name="registration_id" value="">
</form>
如果我通过手动输入(即从输入标签中删除type =“hidden”)执行相同的操作,则它可以正常工作。但是使用POSTER,我似乎无法获得201(创建)响应(即我的数据库中没有显示任何内容)。这件事困扰了我好几天了!
答案 0 :(得分:0)
两个问题
form_valid()
被调用,因此您不需要检查GET / POST,您可以查看django doc中的示例 -
https://docs.djangoproject.com/en/1.6/ref/class-based-views/generic-editing/#django.views.generic.edit.FormView
redirect()
接受模型/视图名称/网址,而不仅仅是模板名称
https://docs.djangoproject.com/en/1.6/topics/http/shortcuts/