如何仅在 Django Rest Framework 中的另一个 API 方法中调用 API POST 方法
Posted
技术标签:
【中文标题】如何仅在 Django Rest Framework 中的另一个 API 方法中调用 API POST 方法【英文标题】:How to call an API POST method only inside another API method in Django Rest Framework 【发布时间】:2022-01-23 10:57:28 【问题描述】:我正在通过 DRF,我想在另一个也有 get 和 post 方法的 API 函数中调用一个具有 GET 和 POST 方法的 API 函数。是否会同时调用 get 和 post 方法,或者我能以任何方式实现它。我在谷歌上搜索我没有得到任何合适的方法
如果有人可以证明它会有所帮助。如果我想在另一个函数中调用 POST 方法怎么办?
views.py
startshift
@api_view(['GET'])
def UserStartShift(request):
if request.method == 'POST':
UserId = request.data.get('UserId')
Ip = request.data.get('Ip')
PortNumber = request.data.get('PortNumber')
print("UserId-->", UserId)
print("Ip-->", Ip)
print('Portnumber-->', PortNumber)
cursor = connection.cursor()
cursor.execute('EXEC [dbo].[Usp_StartShift] @UserId=%s, @IP=%s, @Port=%s', (UserId, Ip, PortNumber,))
return Response(True, status=status.HTTP_200_OK)
endshift
@api_view(['GET'])
def UserStopShift(request, UserId):
try:
users = tblUserShiftDetails.objects.filter(UserId=UserId)
except tblUserShiftDetails.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
if request.method == 'GET':
cursor = connection.cursor()
cursor.execute('EXEC [dbo].[USP_StopShift] @UserId=%s',(UserId,))
return Response(True)
#UserShiftDetailsView
@api_view(['GET'])
def UserShiftDetailsView(request, userid):
try:
users = tblUserShiftDetails.objects.filter(UserId=userid)
except tblUserShiftDetails.DoesNotExist:
return Response(status=status.HTTP_404_NOT_FOUND)
if request.method == 'GET':
if UserStartShift == True:
cursor = connection.cursor()
cursor.execute('EXEC [dbo].[USP_GetCurrentShiftDetails] @UserId=%s',(userid,))
result_set = cursor.fetchall()
for row in result_set:
row = row[0]
return Response("IsStarted":True,"EstimatedShifEnd":(row + datetime.timedelta(hours=9)).strftime('%d-%m-%Y %H:%M %p'),"ReasonforAccess": "null")
elif UserStopShift == True :
cursor = connection.cursor()
cursor.execute('EXEC [dbo].[USP_GetCurrentShiftDetails] @UserId=%s',(userid,))
result_set = cursor.fetchall()
for row in result_set:
row = row[0]
return Response("IsStarted":False,"EstimatedShifEnd":"null","ReasonforAccess": "null")
【问题讨论】:
您想发布到第三方 API 还是您的 API? 到我创建的API函数 然后你可以像在 Python 中那样调用它。您可能会发现从视图本身中提取功能很有帮助,因此共享代码会更容易。 我在这里添加了代码,其中 UserStartShift 和 UserStopShift 这些是我创建的 API 函数,每当用户开始换班时,它将返回特定的响应,同样适用于停止换档。在这里,我有条件方法,但没有成功。有什么方法可以尝试 【参考方案1】:你可以试试这个
使用python请求https://docs.python-requests.org/en/latest/
import requests
class MyAPIOne(APIView):
# headers
def get(self, request, *args, **kwargs):
# call another api for GET
url = '/url-second-api-url'
api_call = requests.get(url, headers=)
print(api_call.json())
# call another api for POST
url = '/url-second-api-url'
data = # post data
api_call = requests.get(url, headers=, data=data)
print(api_call.json())
return Response()
【讨论】:
谢谢,但是我不能像在普通 python 中那样只调用方法名而不是调用 url 那么您需要创建一个独立的方法,然后将该方法调用到 API 中 我在这里添加了代码,其中 UserStartShift 和 UserStopShift 这些是我创建的 API 函数,每当用户开始换班时,它将返回特定的响应,同样适用于停止换档。在这里,我有条件方法,但没有成功。有什么方法可以尝试 我已经使用函数 API 视图创建 你不能在没有任何 URL 的情况下调用 Django 函数。创建一个独立的函数以上是关于如何仅在 Django Rest Framework 中的另一个 API 方法中调用 API POST 方法的主要内容,如果未能解决你的问题,请参考以下文章