Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么form.is valid()在POST请求时计算为false_Android_Python_Django_Rest_Post - Fatal编程技术网

Android 为什么form.is valid()在POST请求时计算为false

Android 为什么form.is valid()在POST请求时计算为false,android,python,django,rest,post,Android,Python,Django,Rest,Post,我正在努力使用一些原型/测试/学习(比如android应用程序),它应该通过json/rest和django获取请求并将请求发布到数据库。我为django安装了躁动,GET请求就像一个符咒一样工作 models.py ... class Exercise(models.Model): name = models.TextField() duration = models.TextField() repeats = models.TextField() creationtime = models.

我正在努力使用一些原型/测试/学习(比如android应用程序),它应该通过json/rest和django获取请求并将请求发布到数据库。我为django安装了躁动,GET请求就像一个符咒一样工作

models.py

...
class Exercise(models.Model):
name = models.TextField()
duration = models.TextField()
repeats = models.TextField()
creationtime = models.TextField()
pausetime = models.TextField()
alarmsound = models.TextField()
description = models.TextField()
type = models.TextField()
...
views.py

....
from restless.views import Endpoint
from restless.models import serialize
from restless.http import Http201, Http400
from .models import *
from restinterface.forms import ExerciseForm

class ExercisesList(Endpoint):
    def get(self, request):
        return serialize(Exercise.objects.all())
...
因此,对于POST请求,我实现了以下小表单:

from django import forms
from .models import *
class ExerciseForm(forms.ModelForm):
    class Meta:
        model = Exercise
在android端,我创建了一个列表,然后将其转换为UrlEncodedFormEntity。将其发送到django似乎也能起作用,但在django端会抛出一个HTTP500

class ExercisesList(Endpoint):
def get(self, request):
    return serialize(Exercise.objects.all())

def post(self, request):
    form = ExerciseForm(request.data)

    # USED TO TEST IF SAVE ACTUALLY WORKS - and it does work!!!
    exercise = form.save()

    if form.is_valid():
        print 'Form seems to be valid ' + form.data
        exercise = form.save()
        return Http201(serialize(exercise))
    else:
        print 'Form seems to be invalid ' + form.data
        print 'invalid data'
        return Http400(reason='invalid author data',
            details=form.errors)
样本输出:

[06/Jun/2014 02:38:43] "GET /exercises/ HTTP/1.1" 200 220
[{'name': u'Campusboard', 'creationtime': '12', 'duration': u'no duration', 'pausetime': u'20', 'repeats':     u'5', 'type': u'repeat', u'id': 1, 'alarmsound': u'default', 'description':     u'this is a description'}]

[06/Jun/2014 02:38:49] "POST /exercises/ HTTP/1.1" 500 672
{u'name': u'Ringe', u'creationtime': u'12', u'duration': u'no     duration', u'pausetime': u'10', u'repeats': u'23', u'type': u'repeats',     u'alarmsound': u'default', u'description': u'this is a descpription'}
看起来form.is\u valid总是计算为false。有人知道我做错了什么吗?我还希望得到比上面发布的更多的调试输出。调试标志已激活

干杯

编辑

我想我会尝试使用一种不同的方法,让你不断更新。
-切换了框架,因为我有点匆忙,使用了django rest框架,它非常适合我的目的

我没有使用django Antientive,但它看起来像request.data应该是表单提交的结果,而不是传递给django表单的内容。现在来看,如果您在请求中使用表单编码的头,那么该属性只会被解析为适合表单实例化的dict


我建议忽略该属性并使用标准的request.POST dict.

您是否尝试使用request.POST而不是ExerciseFormrequest.data?我确实尝试过,但由于框架文档使用request.data,我更专注于让它发挥作用。当然,我可以使用request.POST——我甚至还得到了一个querydict,但这会使不安框架变得无用,不是吗?我试图避免这种情况,因为我想尝试REST框架。还是我完全错了?在这种情况下,使用request.POST不会使框架变得无用吗?