[英]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
但是我得到了“期望從視圖中返回一個Response
, HttpResponse
或HttpStreamingResponse
,但是收到了<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")
一些警告:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.