如何使用Django restfram发布到模型

2024-06-17 12:21:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Django的新手,正在尝试使用restframework。我已经创建了一个简单的模型,我想通过REST和发送JSON数据发布到这个模型。你知道吗

到目前为止我已经做到了:

你知道吗型号.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)

你知道吗序列化程序.py你知道吗

class ContactSerializer(serializers.ModelSerializer):

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

你知道吗网址.py你知道吗

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

你知道吗视图.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.

问题

如何将数据发布到模型并保存?你知道吗


Tags: 数据namepy模型apicitymodelsemail
2条回答

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

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

与URL不匹配:

http://127.0.0.1:8001/api/contact

匹配应该更像以下内容:

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

包括后面的斜杠/

你有几个问题:

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

  2. 您试图自己构建URL,这是不正确的,drf提供routers来自动构建它们。照医生说的做,他们解释得很清楚。

一旦您解决了这些问题,您就可以发布到/api/contact/来创建一个新的。你知道吗

相关问题 更多 >