我需要使用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
答案 0 :(得分:1)
您当前的代码似乎已接近完成。假设您有一个执行实际执行的函数(让我们称之为“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")
一些警告: