Exercices Django

Exercice 1 Django Framework Corrigé S1

Création d'une application de blog simple

Objectif :

  • Comprendre la création de modèles et la manipulation de données dans Django.

Instructions :

  1. Créez une nouvelle application Django appelée blog.
  2. Créez un modèle Post avec les champs suivants :
    • title (Titre du post, type CharField)
    • content (Contenu du post, type TextField)
    • author (Auteur du post, relation ForeignKey vers le modèle User)
    • published_date (Date de publication, type DateTimeField)
  3. Créez une vue qui affiche la liste de tous les posts de blog.
  4. Créez une autre vue qui affiche les détails d'un post spécifique à partir de son id.
  5. Ajoutez les URL correspondantes pour ces deux vues.
  6. Créez les templates HTML pour la liste des posts et les détails d'un post

1. Créer une nouvelle application Django

Commencez par créer un projet Django s'il n'existe pas déjà. Ensuite, créez une nouvelle application appelée blog.

django-admin startproject mysite
cd mysite
python manage.py startapp blog

Ajoutez l'application blog dans le fichier settings.py du projet pour que Django la reconnaisse :

# mysite/settings.py
INSTALLED_APPS = [
    # Autres applications
    'blog',
]

2. Créer le modèle Post

Dans le fichier models.py de l'application blog, définissez le modèle Post avec les champs requis.

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

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.TextField()
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    published_date = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.title
  • Le champ title représente le titre du post.
  • Le champ content contient le contenu du post.
  • Le champ author est une relation avec le modèle User de Django pour représenter l'auteur.
  • Le champ published_date stocke la date et l'heure de publication.

3. Migrer la base de données

Pour appliquer les changements dans la base de données, exécutez les commandes suivantes :

python manage.py makemigrations
python manage.py migrate

4. Créer les vues

Dans le fichier views.py, créez deux vues : une pour afficher la liste de tous les posts et une autre pour afficher les détails d'un post.

# blog/views.py
from django.shortcuts import render, get_object_or_404
from .models import Post

# Vue pour afficher la liste des posts
def post_list(request):
    posts = Post.objects.all().order_by('-published_date')
    return render(request, 'blog/post_list.html', {'posts': posts})

# Vue pour afficher les détails d'un post
def post_detail(request, post_id):
    post = get_object_or_404(Post, id=post_id)
    return render(request, 'blog/post_detail.html', {'post': post})
  • La vue post_list récupère tous les posts du modèle Post et les passe au template post_list.html.
  • La vue post_detail affiche les détails d'un post spécifique en fonction de son id.

5. Configurer les URL

Dans le fichier urls.py de l'application blog, définissez les URL correspondantes aux deux vues créées.

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

urlpatterns = [
    path('', views.post_list, name='post_list'),
    path('post/<int:post_id>/', views.post_detail, name='post_detail'),
]
  • L'URL '' correspond à la vue de la liste des posts.
  • L'URL post/<int:post_id>/ permet d'afficher un post spécifique par son id.

N'oubliez pas d'inclure les URL de l'application blog dans le fichier urls.py principal du projet :

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

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

6. Créer les templates HTML

Créez les templates pour la liste des posts et les détails d'un post.

Template pour la liste des posts (post_list.html)

<!-- blog/templates/blog/post_list.html -->
<!DOCTYPE html>
<html>
<head>
    <title>Liste des posts</title>
</head>
<body>
    <h1>Liste des posts</h1>
    <ul>
        {% for post in posts %}
        <li>
            <a href="{% url 'post_detail' post.id %}">{{ post.title }}</a>
            <p>Publié par {{ post.author }} le {{ post.published_date }}</p>
        </li>
        {% empty %}
        <li>Aucun post disponible.</li>
        {% endfor %}
    </ul>
</body>
</html>

Template pour les détails d'un post (post_detail.html)

<!-- blog/templates/blog/post_detail.html -->
<!DOCTYPE html>
<html>
<head>
    <title>{{ post.title }}</title>
</head>
<body>
    <h1>{{ post.title }}</h1>
    <p>Publié par {{ post.author }} le {{ post.published_date }}</p>
    <div>{{ post.content }}</div>
    <a href="{% url 'post_list' %}">Retour à la liste des posts</a>
</body>
</html>

7. Tester l'application

Lancez le serveur de développement pour tester votre application :

python manage.py runserver

 

Ajouter un commentaire

Veuillez vous connecter pour ajouter un commentaire.

Pas encore de commentaires.