我是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.
问题
如何将数据发布到我的模型并保存?
答案 0 :(得分:0)
你在这里遇到了几个问题:
您正在使用generics.RetrieveUpdateDestroyAPIView
,它将提供PUT,GET和DELETE方法。如果您希望能够POST(这意味着创建)到该端点,您应该使用另一个端点。将其替换为viewsets.ModelViewSet
,它将提供所有CRUD方法。不要忘记导入模块(+more info)。
您正在尝试自己构建不正确的网址,drf提供routers自动构建网址。只需按照文档,他们就会得到很好的解释。
一旦解决了这些问题,您就可以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/
包括尾部斜杠/