e integrando em banco de dados no Pycharm (para iniciantes)
- No terminal do Pycharm instale o DRF | ele fará a API
pip install DjangoRestFramework
- No terminal do Pycharm, inicie o projeto. Obs1: Não esqueça o ponto. Obs2: Nesse modelo, o 'name' é setup.
django-admin startproject name .
- No terminal do Pycharm, inicie o app. Neste exemplo, 'name' será turne.
django-admin startapp name
- No terminal do Pycharm, instale o markdown. É o suporte do browser.
pip install markdown
- Em settings.py, na lista appinstaled, insira os novos apps ‘rest_framework’ e ‘turne’.
- Em models.py, importe de <django.db>. Ele pode já estar na idle.
from django.db import models
- Crie a class/modelo:
class Cantor(models.Model):
nome = models.CharField(max_length=25)
estilo = models.CharField(max_length=15)
def __str__(self):
return self.nome
class Pais(models.Model):
Cont = (
('O', 'Oceania'),
('A', 'America'),
('E', 'Europa'),
('F', 'Africa'),
('S', 'Asia'),
('U', 'Unknow')
)
nome = models.CharField(max_length=20)
data_criacao = models.DateField()
continente = models.CharField(max_length=1, choices=Cont, blank=False, null=False, default='U')
populacao = models.CharField(max_length=12)
def __str__(self):
return self.nome
Informações:
Informação 1! No nível, observar a função max_lenght, choices, blank e null.
Informação 2! O max_lenght de 1 caracter diz que no DB será salvo apenas 1 letras.
Informação 3! O choices aplica as variáveis dispostas.
Informação 4! O blank False não permite que no DB não tenha nível.
Informação 5! O null False não permite que seja nulo.
Informação 6! O Default é o modelo-base, que no caso escolhido é ‘B’.
- Suba as migrações no Data Base através do terminal:
python manage.py makemigrations
python manage.py migrate
- Em admin.py:
from django.contrib import admin
from turne.models import Cantor, Pais
- Criar a class que define os campos que serão mostrados ao admin:
class Cantores(admin.ModelAdmin):
list_display = ('id', 'nome', 'estilo')
list_display_links = ('estilo',)
search_fields = ('nome', 'estilo',)
list_per_page = 10
admin.site.register(Cantor, Cantores)
class Paises(admin.ModelAdmin):
list_display = ('nome', 'data_criacao', 'continente', 'populacao')
list_display_links = ('nome','continente')
search_fields = ('nome',)
admin.site.register(Pais, Paises)
INFORMAÇÕES:
Informação 1! O ‘id’ sempre é gerado.
Informação 2! list_diplay_links são os Fields que o admin pode alterar/editar
Informação 3! search_fields serve para buscar os atributos indicados
Informação 4! list_per_page é o máximo de itens por página
Informação 5! admin.site.register(m, c) registra o (modelo e a configuração)
- Criar SuperUsuario no terminal:
python manage.py createsuperuser
-
Criar no app/package (Turne) o arquivo serializer.py
-
Dentro do arquivo, importar:
from rest_framework import serializers
from turne.models import Cantor, Pais
- Criar a classe onde serão definidos modelos e campos a serem recebidos pela API.
class CantorSerializer(serializers.ModelSerializer):
class Meta: #qual o modelo e os campos que utilizaremos
model = Cantor
fields = '__all__'
class PaisSerializer(serializers.ModelSerializer):
class Meta:
model = Pais
fields = ['nome', 'continente', 'populacao', 'data_criacao']
- Em views.py import:
from rest_framework import viewsets
from turne.models import Cantor, Pais
from turne.serializer import CantorSerializer, PaisSerializer
- Crie a class ViewSet:
class CantorViewSet(viewsets.ModelViewSet): #já temos modelo vinculado, por isso usar o ModelViewSet
queryset = Cantor.objects.all() # indicará o queryset que utilizaremos
serializer_class = CantorSerializer #classe responsavel por serializar
class PaisViewSet(viewsets.ModelViewSet):
"""Exibindo todos os países"""
queryset = Pais.objects.all()
serializer_class = PaisSerializer
Informação! queryset busca dados no db
- No url.py:
from django.contrib import admin
from turne.views import CantorViewSet, PaisViewSet
from rest_framework import routers
from django.urls import path, include
- Registrar as rotas do router a serem utilizada:
router = routers.DefaultRouter() # é a rota principal
router.register('cantor', CantorViewSet, basename='Cantores')
router.register('pais', PaisViewSet, basename='Paises')
- Incluir as rotas na URL:
urlpatterns = [
path('admin/', admin.site.urls),
path('', include(router.urls)),
path('cantor/<int:pk>/', CantorViewSet.as_view),
path('paise/<int:pk>/', PaisViewSet.as_view)
]