0%
Desenvolvimento Web com Django

Desenvolvimento Web com Django

Como criar aplicações web robustas com o framework Django.

I

InSkillCoach

· min

Desenvolvimento Web com Django

Django é um framework web Python de alto nível que incentiva um desenvolvimento rápido e limpo. Com sua filosofia “batteries included”, o Django fornece tudo de que você precisa para construir aplicações web robustas e de fácil manutenção.

Por que escolher o Django?

O Django oferece diversas vantagens para o desenvolvimento web:

  • Rápido de desenvolver: o Django segue o princípio DRY (Don’t Repeat Yourself) e automatiza muitas tarefas
  • Seguro por padrão: proteção contra as vulnerabilidades web mais comuns (XSS, CSRF, injeção de SQL…)
  • Escalável: usado por sites de alto tráfego como Instagram, Pinterest e Disqus
  • Batteries included: ORM integrado, admin automático, sistema de templates, autenticação…
  • Comunidade ativa: documentação excelente e muitos recursos disponíveis

Instalação e configuração

Para começar com o Django, instale-o via pip:

# Criar um ambiente virtual
python -m venv venv
source venv/bin/activate  # No Windows: venv\Scripts\activate

# Instalar o Django
pip install django

# Criar um novo projeto
django-admin startproject monsite

# Navegar até o projeto
cd monsite

# Criar uma aplicação
python manage.py startapp blog

Estrutura de um projeto Django

Um projeto Django típico é organizado da seguinte forma:

monsite/
    manage.py
    monsite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py
    blog/
        __init__.py
        admin.py
        apps.py
        models.py
        tests.py
        views.py
        urls.py
        migrations/
        templates/
            blog/
                base.html
                index.html
                detail.html
        static/
            blog/
                css/
                js/
                images/

Models: definindo seus dados

Os models do Django definem a estrutura dos seus dados:

# blog/models.py
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

class Category(models.Model):
    name = models.CharField(max_length=100)
    slug = models.SlugField(unique=True)
    
    def __str__(self):
        return self.name
    
    class Meta:
        verbose_name_plural = "categories"

class Post(models.Model):
    STATUS_CHOICES = (
        ('draft', 'Brouillon'),
        ('published', 'Publié'),
    )
    
    title = models.CharField(max_length=200)
    slug = models.SlugField(unique_for_date='publish')
    author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='blog_posts')
    body = models.TextField()
    category = models.ForeignKey(Category, on_delete=models.CASCADE, related_name='posts')
    publish = models.DateTimeField(default=timezone.now)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    status = models.CharField(max_length=10, choices=STATUS_CHOICES, default='draft')
    
    def __str__(self):
        return self.title
    
    class Meta:
        ordering = ('-publish',)

Depois de definir seus models, crie e aplique as migrations:

python manage.py makemigrations
python manage.py migrate

Views: a lógica da sua aplicação

As views processam as requisições e retornam respostas:

# blog/views.py
from django.shortcuts import render, get_object_or_404
from django.core.paginator import Paginator
from .models import Post, Category

def post_list(request, category_slug=None):
    posts = Post.objects.filter(status='published')
    category = None
    
    if category_slug:
        category = get_object_or_404(Category, slug=category_slug)
        posts = posts.filter(category=category)
    
    paginator = Paginator(posts, 10)  # 10 posts por página
    page = request.GET.get('page')
    posts = paginator.get_page(page)
    
    return render(request, 'blog/post_list.html', {
        'posts': posts,
        'category': category
    })

def post_detail(request, year, month, day, post_slug):
    post = get_object_or_404(
        Post,
        slug=post_slug,
        status='published',
        publish__year=year,
        publish__month=month,
        publish__day=day
    )
    
    return render(request, 'blog/post_detail.html', {'post': post})

URLs: roteamento das requisições

Configure as URLs para direcionar as requisições às views apropriadas:

# blog/urls.py
from django.urls import path
from . import views

app_name = 'blog'

urlpatterns = [
    path('', views.post_list, name='post_list'),
    path('category/<slug:category_slug>/', views.post_list, name='post_list_by_category'),
    path('<int:year>/<int:month>/<int:day>/<slug:post_slug>/', views.post_detail, name='post_detail'),
]

# monsite/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blog/', include('blog.urls', namespace='blog')),
]

Templates: a interface do usuário

Os templates definem como os dados são apresentados:

<!-- blog/templates/blog/base.html -->
<!DOCTYPE html>
<html>
<head>
    <title>{% block title %}Mon Blog{% endblock %}</title>
    <link rel="stylesheet" href="{% static 'blog/css/style.css' %}">
</head>
<body>
    <header>
        <h1>Mon Blog</h1>
        <nav>
            <ul>
                <li><a href="{% url 'blog:post_list' %}">Accueil</a></li>
                {% for cat in categories %}
                <li><a href="{% url 'blog:post_list_by_category' cat.slug %}">{{ cat.name }}</a></li>
                {% endfor %}
            </ul>
        </nav>
    </header>
    
    <main>
        {% block content %}
        {% endblock %}
    </main>
    
    <footer>
        <p>&copy; {% now "Y" %} Mon Blog</p>
    </footer>
</body>
</html>

<!-- blog/templates/blog/post_list.html -->
{% extends "blog/base.html" %}

{% block title %}
    {% if category %}{{ category.name }}{% else %}Articles{% endif %}
{% endblock %}

{% block content %}
    <h2>
        {% if category %}
            Articles dans la catégorie "{{ category.name }}"
        {% else %}
            Tous les articles
        {% endif %}
    </h2>
    
    {% for post in posts %}
        <article>
            <h3><a href="{{ post.get_absolute_url }}">{{ post.title }}</a></h3>
            <p class="date">Publié le {{ post.publish }} par {{ post.author }}</p>
            <p>{{ post.body|truncatewords:30|linebreaks }}</p>
        </article>
    {% empty %}
        <p>Aucun article disponible.</p>
    {% endfor %}
    
    {% include "pagination.html" with page=posts %}
{% endblock %}

Administração do Django

O Django fornece uma interface de administração pronta para uso:

# blog/admin.py
from django.contrib import admin
from .models import Category, Post

@admin.register(Category)
class CategoryAdmin(admin.ModelAdmin):
    list_display = ('name', 'slug')
    prepopulated_fields = {'slug': ('name',)}

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug', 'author', 'publish', 'status')
    list_filter = ('status', 'created', 'publish', 'author')
    search_fields = ('title', 'body')
    prepopulated_fields = {'slug': ('title',)}
    raw_id_fields = ('author',)
    date_hierarchy = 'publish'
    ordering = ('status', 'publish')

Executando o servidor de desenvolvimento

Para testar sua aplicação:

python manage.py runserver

Acesse http://127.0.0.1:8000/ no seu navegador.

Funcionalidades avançadas

O Django oferece diversas funcionalidades avançadas:

  • Autenticação: sistema completo de gerenciamento de usuários
  • Formulários: criação, validação e processamento de formulários
  • Testes: framework de testes integrado
  • Internacionalização: suporte multilíngue
  • Cache: vários níveis de cache
  • Segurança: proteção contra ataques comuns

Deploy

Para fazer o deploy de uma aplicação Django em produção:

  1. Configure os parâmetros de produção no settings.py
  2. Colete os arquivos estáticos: python manage.py collectstatic
  3. Escolha um servidor WSGI, como Gunicorn ou uWSGI
  4. Configure um servidor web, como Nginx ou Apache
  5. Use um banco de dados robusto, como PostgreSQL

Conclusão

O Django é um framework poderoso que permite construir rapidamente aplicações web complexas e seguras. Sua filosofia “batteries included” e sua estrutura bem organizada fazem dele uma excelente escolha para desenvolvedores Python que desejam criar sites robustos e de fácil manutenção.

Seja para construir um simples blog, um e-commerce ou uma aplicação web complexa, o Django oferece as ferramentas necessárias para o sucesso do seu projeto.

InSkillCoach

Sobre InSkillCoach

Especialista em treinamento e tecnologias

Coach especializado em tecnologias avançadas e IA, apoiado pela GNeurone Inc.

Certificações:

  • AWS Certified Solutions Architect – Professional
  • Certificações Google Cloud
  • Microsoft Certified: DevOps Engineer Expert
  • Certified Kubernetes Administrator (CKA)
  • CompTIA Security+
1.5k
196

Comentários

Os comentários são alimentados pelo GitHub Discussions

Conecte-se com o GitHub para participar da discussão

Link copiado!