I'm working on Django project where I have to make a API. In my normal Django I have one functionality named Run , that I want to add that functionality in my API View Here's my model
class Robot(models.Model):
robot = models.CharField(max_length=100)
short_Description = models.CharField(max_length=200)
status = models.CharField(max_length=20)
parameter = models.CharField(max_length=200)
jenkins_job = models.CharField(max_length=100, default='JenkinsJobName')
jenkins_token = models.CharField(max_length=100, default='JenkinsToken')
jenkins_build = models.CharField(max_length=10, default=0)
jenkins_build_status = models.CharField(max_length=20, default="Never Run")
def __str__(self):
return self.robot
class assignParameter(models.Model):
parameterName = models.CharField(max_length=100, blank=True)
assignRobot= models.ForeignKey(Robot, on_delete=models.CASCADE, related_name='param', blank=True, null=True)
here's my serializer.py
from .models import Robot,assignParameter
from rest_framework import serializers
class assignParameterSerializer(serializers.ModelSerializer):
class Meta:
model = assignParameter
fields = ['id', 'parameterName', 'assignRobot']
class RobotSerializer(serializers.ModelSerializer):
param = assignParameterSerializer(many=True, read_only=True)
class Meta:
model = Robot
fields = ['id', 'robot', 'short_Description', 'status', 'parameter', 'jenkins_job', 'jenkins_token', 'jenkins_build', 'jenkins_build_status','param']
here's my normal run function
def Run_data(Request,id):
if Request.method == 'POST':
pi = Robot.objects.get(pk=id)
jenkinsJob = list(Robot.objects.values('jenkins_job').get(pk=id).values())[0]
jenkinsToken = list(Robot.objects.values('jenkins_token').get(pk=id).values())[0]
fm = RobotReg(Request.POST, instance=pi)
out = fm.data
robot_params = list(dict(out).values())
node = robot_params.pop(1)[0]
url = list(Lookup.objects.values('Value').filter(Type='JENKINS_URL').values())[0].get('Value')
Uipath = list(Lookup.objects.values('Additionalinfo').filter(Type='JENKINS_NODES',Value=node).values())[0].get('Additionalinfo')
robotexe = list(Lookup.objects.values('Value').filter(Type='ROBOT_EXE_PATH',Additionalinfo=node).values())[0].get('Value')
robot_params.append(['node', node])
robot_params.append(['Uipath', Uipath])
robot_params.append(['robotexe', robotexe])
params_count = len(robot_params)
params_exist = len(robot_params[1][0])
params = ""
urlFinal = ""
# url = Lookup.objects.filter(Type="JENKINS_URL").values_list(Value)
if params_count > 0:
for i in range(params_count-1):
params = params + robot_params[i+1][0] + '=' + robot_params[i+1][1] + '&'
url = url + jenkinsJob + "/buildWithParameters?"
else:
url = url + jenkinsJob + "/build?"
urlFinal = url + params + 'token=' + jenkinsToken
print(urlFinal, flush=True)
resp = requests.post(urlFinal)
if resp:
messages.info(Request, "Success! Robot is being run")
else:
messages.info(Request, "Failed! Robot could not be run")
if fm.is_valid():
fm.save()
fm = RobotReg()
return HttpResponseRedirect('/dashboard')
else:
pi = Robot.objects.get(pk=id)
fm = RobotReg(instance=pi)
param = list(assignParameter.objects.values('parameterName').filter(assignRobot=pi))
rob = Robot.objects.all()
lup = Lookup.objects.all()
return render(Request, 'hello/runrobot.html', {'form': fm, 'robot': rob,'Lookup' : lup,'parameter' : param})
here's my API class
class RobotViewSet(ListAPIView):
queryset = Robot.objects.all()
serializer_class = RobotSerializer
# filter_backends = [DjangoFilterBackend]
# filterset_fields = ['robot']
filter_backends = [SearchFilter]
search_fields = ['robot']
authentication_classes = [SessionAuthentication]
permission_classes = [IsAuthenticatedOrReadOnly]
Now in API class like crud operation how to add this Run functionality?
