无法将POST参数传递给Django视图

时间:2015-07-15 14:21:53

标签: django django-forms django-templates django-views http-post

我创建了一个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(创建)响应(即我的数据库中没有显示任何内容)。这件事困扰了我好几天了!

1 个答案:

答案 0 :(得分:0)

两个问题

    当有效表单数据被POST时,
  1. form_valid()被调用,因此您不需要检查GET / POST,您可以查看django doc中的示例 - https://docs.djangoproject.com/en/1.6/ref/class-based-views/generic-editing/#django.views.generic.edit.FormView

  2. redirect()接受模型/视图名称/网址,而不仅仅是模板名称 https://docs.djangoproject.com/en/1.6/topics/http/shortcuts/