Django Rest Framework - определить API из существующего представления - PullRequest
0 голосов
/ 20 октября 2018

Я пишу свое приложение django, и у меня есть много представлений, которые уже возвращают объект JSONResponse, например:

def power_on_relay(request):
'''View that Power on one of the available relays'''
try:
    relay_id = get_or_raise(request, 'relay_id')


    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(relay_id, GPIO.OUT)
    GPIO.output(relay_id, True)
    pin_status = GPIO.input(relay_id)


    return JsonResponse({'success': True, 'message': 'Relay {0} was powered on'.format(relay_id), 'data': None})
except Exception as ex:
    return JsonResponse({'success': False, 'message': str(ex), 'data': ''})

Теперь мне нужно представить некоторые из этих представлений как «API»«и мне нужно управлять аутентификацией, регулированием и т. д. Итак, мне было интересно, возможно ли использовать DRF и без написания тонны избыточного кода.

Я имею в виду, есть короткий способ сделать это?что-то вроде декоратора, который не меняет поведение моего веб-приложения?

Есть предложения?

1 Ответ

0 голосов
/ 20 октября 2018

Вам нужно будет использовать api_view декоратор

from rest_framework.decorators import api_view
from rest_framework.response import Response

<b>@api_view(['GET'])</b>
def power_on_relay(request):
    '''View that Power on one of the available relays'''
    try:
        relay_id = get_or_raise(request, 'relay_id')


        GPIO.setmode(GPIO.BOARD)
        GPIO.setup(relay_id, GPIO.OUT)
        GPIO.output(relay_id, True)
        pin_status = GPIO.input(relay_id)

        return <b>Response</b>({'success': True, 'message': 'Relay {0} was powered on'.format(relay_id), 'data': None})
    except Exception as ex:
        return <b>Response</b>({'success': False, 'message': str(ex), 'data': ''})
...