03 Rest Streaming
Para criar um aplicativo REST Django que inclua a classe Content, vamos seguir os passos abaixo:
1. Configuração Inicial do Projeto Django
Primeiro, você precisará criar um novo projeto Django e adicionar um app para gerenciar o conteúdo.
1. Adicionar o Virtual Enviroment
2. Instalar Django
3. Crie um novo projeto Django:
4. Crie um app dentro do projeto:
5. Instalar Rest Django Framework
6. Adicione o app no arquivo settings.py:
2. Definindo o Modelo Content
No arquivo content_app/models.py, vamos definir a classe Content conforme o modelo proposto:
from django.db import models
from django.contrib.auth.models import User
class Content(models.Model):
CONTENT_TYPES = [
('audio', 'Audio'),
('video', 'Video'),
]
title = models.CharField(max_length=255)
description = models.TextField()
file_url = models.URLField()
thumbnail_url = models.URLField(blank=True, null=True)
content_type = models.CharField(max_length=10, choices=CONTENT_TYPES)
upload_date = models.DateTimeField(auto_now_add=True)
views = models.IntegerField(default=0)
likes = models.IntegerField(default=0)
is_public = models.BooleanField(default=True)
status = models.CharField(max_length=20, default='published')
creator = models.ForeignKey(User, related_name='contents', on_delete=models.CASCADE)
def __str__(self):
return self.title
- Explicação:
- O campo
creatoré uma ForeignKey referenciando o usuário que criou o conteúdo. content_typedefine se o conteúdo é áudio ou vídeo.file_urlé o campo que contém a URL do arquivo de mídia.
2.1 Migrar o Banco de Dados Para aplicar as mudanças do modelo no banco de dados, execute as migrações:
2.2. Acesso ao Django Admin
2.3. Rodar o nosso sistema
2.4. Para visualizar classe content no Django Admin precisamos adicionar o registro no arquivo admin.py do content_app
3. Serializador (Serializer) para Content
No Django REST, precisamos de um serializador para transformar o modelo em um formato JSON que possa ser exposto via API.
Crie o arquivo content_app/serializers.py:
from rest_framework import serializers
from .models import Content
class ContentSerializer(serializers.ModelSerializer):
class Meta:
model = Content
fields = '__all__'
4. Views para o Content
No arquivo content_app/views.py, crie as views utilizando o Django REST framework para expor a API.
from rest_framework import viewsets
from .models import Content
from .serializers import ContentSerializer
from rest_framework.permissions import IsAuthenticatedOrReadOnly
class ContentViewSet(viewsets.ModelViewSet):
queryset = Content.objects.all()
serializer_class = ContentSerializer
permission_classes = [IsAuthenticatedOrReadOnly]
def perform_create(self, serializer):
serializer.save(creator=self.request.user)
- Explicação:
ContentViewSetfornece as ações padrão de um ViewSet (list, create, retrieve, update, destroy).perform_createsobrescreve o métodocreatepara garantir que o criador (creator) seja o usuário logado.
5. URLs para o App
Crie um arquivo content_app/urls.py e defina as rotas para o ContentViewSet:
from rest_framework.routers import DefaultRouter
from .views import ContentViewSet
router = DefaultRouter()
router.register(r'contents', ContentViewSet)
urlpatterns = router.urls
Agora, no arquivo principal de URLs do projeto streaming_platform/urls.py, inclua o roteamento do app content_app:
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/', include('content_app.urls')),
]
6. Configurar Autenticação
Como estamos utilizando o campo creator baseado no usuário logado, é importante configurar a autenticação no Django REST framework.
No arquivo settings.py, adicione a configuração para o Django REST framework:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticatedOrReadOnly',
],
}
7. Migrar o Banco de Dados
Para aplicar as mudanças do modelo no banco de dados, execute as migrações:
8. Testando a API
Agora, você pode testar a API usando ferramentas como o Postman ou curl. Alguns endpoints disponíveis seriam:
GET /api/contents/: Lista todos os conteúdos.POST /api/contents/: Cria um novo conteúdo (requer autenticação).GET /api/contents/<id>/: Detalhes de um conteúdo específico.PUT /api/contents/<id>/: Atualiza um conteúdo (requer autenticação).DELETE /api/contents/<id>/: Remove um conteúdo (requer autenticação).
9. Administração no Django Admin
Para facilitar a visualização dos conteúdos no Django Admin, você pode registrar o modelo Content no admin. No arquivo content_app/admin.py:
Agora, ao acessar o painel de administração do Django, você poderá visualizar e gerenciar os conteúdos.
Resumo
Essa implementação cria um app RESTful no Django com suporte à criação, leitura, atualização e exclusão (CRUD) de conteúdos, incluindo autenticação e associação com os criadores. Você pode expandir a aplicação para adicionar funcionalidades adicionais, como filtros ou buscas.