Я пытаюсь создать Restful Api для следующих способов запуска заданий jenkins для запуска на соусах. Я хочу поставить работу в очередь, используя restful API. Я использую Django Restful Framework.
- CreateMethod: принимает два файла: ProjectName и URL и возвращает идентификатор токена.
VerifyStatus: принимает идентификатор токена и возвращает три поля. TokenID, работает: True / False и no_of_jobs: integervalue (0, если не указано)
relseaseMethod: Принимает вызов токена освобождения и возвращает true в случае успеха.
Я новичок в Restful API с, я пытаюсь запустить задание Jenkins в лаборатории соуса и поставить их в очередь с помощью API успокоительного на python Djano restframework. Проведи меня через.
Views.py
class RegisterTestMethodView(APIView):
authentication_classes = [SessionAuthentication, TokenAuthentication, BasicAuthentication]
permission_classes = [IsAuthenticated] #No access (not even read if not authorized)
def post(self, request, format=None):
serializer = RegisterTestMethodSerializers(data=request.data)
if serializer.is_valid():
serializer.save()
return Response({'tokenid':serializer.data['id']}, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
class CheckStatusView(APIView):
def get_object(self, pk):
try:
return Jobs.objects.get(pk=pk)
except Jobs.DoesNotExist:
raise Http404
def get(self, request, pk, format=None):
snippet = self.get_object(pk)
serializer = RegisterTestMethodSerializers(snippet)
return Response({"tokenid":serializer.data["id"], "Runtestnow" : False, "VMcount" : 0 })
class ReleaseTokenView(APIView):
def get_object(self, pk):
try:
return Jobs.objects.get(pk=pk)
except Jobs.DoesNotExist:
raise Http404
def delete(self, request, pk, format=None):
snippet = self.get_object(pk)
snippet.delete()
return Response(data={'Deleted':True}, status=status.HTTP_204_NO_CONTENT)
Serailizers.py
rom rest_framework import serializers
from .models import Jobs
from random import random
RegisterTestMethodSerializers(serializers.HyperlinkedModelSerializer):
class Meta:
model = Jobs
fields = ('id','name','url')
Models.py
from django.db import models
# Create your models here.
class Jobs(models.Model):
name = models.CharField(max_length=100)
url = models.URLField()
def __str__(self):
return self.name
Urls. py
from django.urls import path, include
from . import views
from .views import (RegisterTestMethodView,
RegisterTestMethodViewDetail,
CheckStatusView,
ReleaseTokenView
)
from rest_framework import routers
from rest_framework.authtoken.views import obtain_auth_token
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
urlpatterns = [
path('', include(router.urls)),
path('registertestmethod/',RegisterTestMethodView.as_view()),
path('registertestmethod/<int:pk>/',
RegisterTestMethodViewDetail.as_view()),
path('checkstatus/<int:pk>', CheckStatusView.as_view()),
path('releasetoken/<int:pk>', ReleaseTokenView.as_view()),
]
Я добавил свой код здесь. У меня есть другие классы и функции в моем проекте. Я пытался удалить все из них. Вы можете увидеть дополнительный импорт в результате этого. Мой код выполняет следующие вещи.
POST --> http://localhost:8000/registertestmethod/
{
"name": "Name",
"url": "https://www.google.com"
}
возвращает
{
"tokenid": 32 #unique token ID return
}
Этот tokenid должен быть длинным. На данный момент я использую id.
GET --> http://localhost:8000/checkstatus/32
возвращает
{
"tokenid": 32, #unique tokenid refering to register info
"Runtestnow": false, #if job is running
"VMcount": 0 # number of VM used in sauce lab by the Jobs
}
DELETE --> http://localhost:8000/releasetoken/32
# должен удалить задания после завершения. удаляет и возвращает
{
"Deleted": true
}
Я хочу, чтобы это было Dynami c и хранить информацию в базе данных. Токен должен вернуть все на checkstatus.