无法从Django模板

时间:2015-07-21 10:46:07

标签: python django http post django-templates

我通过Django模板传递POST参数。模板是基本的:

<form method="POST" action="{% url 'registration_id' %}"> 
{% csrf_token %} 
<input name="registration_id" value="{{ registration_id }}"> 
<input name="device_id" value="{{ device_id }}"> 
<button>Submit</button> 
</form>

model中,registration_id是必需的TextField,而device_id是可选的十六进制字段。要测试我的设置,我使用名为HttpRequester的Mozilla插件。它适用于以下情况:

1-我将内容发布到我的网址,如下所示:

csrfmiddlewaretoken=foobar&registration_id=foo

2-或者像这样:

csrfmiddlewaretoken=foobar&registration_id=foo&device_id=

(即在device_id中没有传递任何内容,但提及变量)

3-但如果我这样做,则没有任何内容被发布:

csrfmiddlewaretoken=foobar&registration_id=foo&device_id=1234abcd  

(确保device_id是十六进制值)

Views.py是:

class DeviceCreateView(FormView):
    model = GCMDevice
    form_class = DeviceForm
    template_name = "deviceobj_form.html"
    def form_valid(self, form): 
        reg_id = self.request.POST.get('registration_id','')
        dev_id = self.request.POST.get('device_id','')
        if is_hex(dev_id):
            GCMDevice.objects.create(registration_id=reg_id, device_id=dev_id)
        else:
            GCMDevice.objects.create(registration_id=reg_id, device_id='abcdef2222')
        return render_to_response('success.html',RequestContext(self.request,{}))

def is_hex(s):
    try:
        int(s,16)
        return True
    except ValueError:
        return False

我在第三选择中做错了什么?

1 个答案:

答案 0 :(得分:0)

我正在使用的推送通知library中出现错误,而不是我上面发布的代码。使用postgres或mysql作为数据库引擎,尝试使用表单和http帖子创建或更新gcm设备失败。验证器正在针对字符串值运行,因此最小和最大验证失败。重写了验证器以对整数值运行。