如何仅在 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 方法的主要内容,如果未能解决你的问题,请参考以下文章
如何仅在 Django Rest Framework 中的另一个 API 方法中调用 API POST 方法
Django Rest Framework:如何将数据传递给嵌套的序列化器并仅在自定义验证后创建对象
为啥 django-rest-framework 不显示 OneToOneField 数据 - django