如何使用django rest框架发布到模型

时间:2015-03-09 13:25:24

标签: python django rest django-rest-framework

我是Django的新手并尝试使用restframework。我创建了一个简单的模型,我想通过REST POST这个模型并发送JSON数据。

这是我到目前为止所做的:

models.py

class Contact(models.Model):
    name = models.CharField(max_length=120)
    email = models.EmailField()
    phone = models.CharField(max_length=15)
    city = models.CharField(max_length=120)
    comment = models.CharField(max_length=500)
    timestamp = models.DateTimeField(auto_now_add=True)

serializers.py

class ContactSerializer(serializers.ModelSerializer):

    class Meta:
        model = Contact
        fields = ('name', 'email', 'phone', 'city', 'comment', 'timestamp')

urls.py

url(r'^api/contact/(?P<pk>[0-9]+)/$', ContactDetail.as_view()),

views.py

class ContactDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Contact.objects.all()
    serializer_class = ContactSerializer
    format = None

但是当我尝试发布到http://127.0.0.1:8001/api/contact时,我收到此错误

13. ^index.html#/verifyEmail/(?P<key>\w+)/$ [name='account_confirm_email']
14. ^api/contact/(?P<pk>[0-9]+)/$
The current URL, api/contact, didn't match any of these.

问题

如何将数据发布到我的模型并保存?

2 个答案:

答案 0 :(得分:0)

你在这里遇到了几个问题:

  1. 您正在使用generics.RetrieveUpdateDestroyAPIView,它将提供PUT,GET和DELETE方法。如果您希望能够POST(这意味着创建)到该端点,您应该使用另一个端点。将其替换为viewsets.ModelViewSet,它将提供所有CRUD方法。不要忘记导入模块(+more info)。

  2. 您正在尝试自己构建不正确的网址,drf提供routers自动构建网址。只需按照文档,他们就会得到很好的解释。

  3. 一旦解决了这些问题,您就可以POST到/ api / contact /创建一个新问题。

答案 1 :(得分:0)

你的主要问题是这里的正则表达式:

url(r'^api/contact/(?P<pk>[0-9]+)/$', ContactDetail.as_view())

与网址不匹配:

http://127.0.0.1:8001/api/contact

匹配应该更像以下内容:

http://127.0.0.1:8001/api/contact/123412213/

包括尾部斜杠/