簡體   English   中英

如何使用DRF創建雙前綴並讀取POST負載

[英]How to create dual prefix and read POST payload with DRF

我需要使用POST方法執行SSH命令。 該命令及其參數在POST請求的JSON有效負載中指定。

我不知道如何使用來自Django REST框架的DefaultRouter完成此操作

所以我的第一個問題是 如何為此網址創建路線或視圖?

POST http://127.0.0.1/datacenter/<datacenter_id>/<server_id>/ssh/

而且,如何從有效負載中獲取數據以進行處理?

我已經嘗試過這樣的事情;

@detail_route(methods=['POST'])
def ssh(self, request, pk=None):
    print request.data

但是我得到了“期望從視圖中返回一個ResponseHttpResponseHttpStreamingResponse ,但是收到了<type 'NoneType'>

models.py

class Datacenter(models.Model):

    # Parent data

    def __unicode__(self):
        return self.name

class Servers(models.Model):

    datacenter = models.ForeignKey(Datacenter)

    def __unicode__(self):
            return self.hostname

serializers.py

class ServerSerializer(serializers.ModelSerializer):
    class Meta:
        model = Server

class DatacenterSerializer(serializers.ModelSerializer):
    servers = ServerSerializer(many=True)
    class Meta:
        model = Datacenter
        fields = ('id', 'servers')

views.py

class DatacenterViewSet(viewsets.ModelViewSet):

    queryset = Datacenter.objects.all()
    serializer_class = DatacenterSerializer

class ServerViewSet(viewsets.ModelViewSet):

    queryset = Server.objects.all()
    serializer_class = ServerSerializer

urls.py

router = routers.DefaultRouter()
router.register(r'Datacenter', views.DatacenterViewSet)

urlpatterns = router.urls

您當前的代碼似乎已完成。 假設您具有執行實際執行的功能(我們稱其為“ run_ssh_command”),則視圖的基本版本可能如下所示:

@detail_route(methods=['POST'])
def ssh(self, request):
    input = json.loads(request.data)  # I'd use a serializer here
    output = run_ssh_command(input['command'])  # or whatever the field name is
    return Response(json.dumps({'result': output}),
                            content_type="application/json")

一些警告:

  1. 確保使用正確的身份驗證,
  2. 請記住,某些SSH命令可能需要一段時間才能運行,或者可能會掛起(例如,EG,等待輸入),
  3. 看看http://www.django-rest-framework.org/tutorial/2-requests-and-responses/上的示例,了解如何使用序列化程序進行請求驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM