Django: REST

1 minuto(s) de leitura

Com o objetivo de estudar maneiras de usar os dados do modelo em um formato json, similar ao output de uma API, fui estudar como serializar dados do Django.

A meta é usar o Django Rest Framework no final, mas para isso quero estudar alternativas mais simples.

A primeira alternativa é



Json de um dataframe

url.py

# Consultar: URL/api_df
path('api_df', views_admin.go_api_dataframe, name='go_api_pandas'),


views.py

def go_api_dataframe(request):
    # Using Pandas
    details = {
        'Name': ['Ankit', 'Aishwarya', 'Shaurya', 'Shivangi'],
        'Age': [23, 21, 22, 21],
        'University': ['BHU', 'JNU', 'DU', 'BHU'],
    }
    df = pd.DataFrame(details)
    result = df.to_json(orient='records')
    parsed = json.loads(result)
    return JsonResponse(parsed, safe=False)



Json de um model

url.py

# Consultar: URL/api_model
path('api_model', views_admin.go_api_model, name='go_api_modelo'),


views.py

def go_api_model(request):
    # Using Model
    return JsonResponse(
        list(Students.objects.all().values()),
        safe=False,
        content_type='application/json'
    )



Django Rest Framework

  • https://www.django-rest-framework.org


pip3 install djangorestframework
INSTALLED_APPS = [
    ...
    'rest_framework',
]



Referências



dddd

REST_FRAMEWORK = {
    "DEFAULT_AUTHENTICATION_CLASSES": (
        "rest_framework.authentication.SessionAuthentication",
    ),
}
# Testes
curl -X GET --user {username}:{password} http://localhost:8000/api_rest2

# dddd
curl -X GET --user [email protected]:111 http://localhost:8000/api_rest2 >> output-file.json

# Servidor Local, com Autenticação
curl -X GET --user [email protected]:111 http://localhost:8000/api/rest/?format=json >> output-file.json

# Servidor Heroku, com Autenticação
curl -X GET --user [email protected]:111 https://openescola.herokuapp.com/api/rest/?format=json >> output-file.json

# Servidor Heroku, sem Autenticação
curl -X GET https://openescola.herokuapp.com/api/rest/?format=json >> output-file.json

Deixe um comentário