Notes de Cours - Django
Notes de Cours - Django
Notes de Cours - Django
M2i Django
Introduction
Framework python permettant de créer des applications web, rapidement et
sécurisé.
Il contient tout ce dont vous avez besoin ! Un serveur web, un ORM puissant,
un moteur de gabarit, un client de test et beaucoup d'autres fonctionnalités qui
vous faciliteront la vie !
Django follows the Model-Template-View (MTV) architecture. MTV differs from
the Model-View-Controller (MVC) architecture in the sense that the Controller part is
already implemented by the framework itself through templates.
The Django MTV architecture is composed of the following components:
View: it defines the business logic, in the sense that it communicates with the
model and translates it into a format readable by the Template. A view is a
Python function, which takes a request as input and returns a Web
response as output. All the functions representing the business logic are
stored in a script named views.py.
Template: it defines the structure or the layout of a file, such as a HTML file. It
is a text document or a Python string encoded through the Django
template language. All the templates are stored in a subdirectory of the App
named templates.
M2i Django 1
Commencer un projet
settings.py
M2i Django 2
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'gag'
]
Models
Un modèle est la source d’information unique et définitive à propos de vos données.
Il contient les champs et le comportement essentiels des données que vous
stockez.
class Person(models.Model):
first_name = models.CharField(max_length = 30)
last_name = models.CharField(max_length = 30)
Les bases :
Avec tout ça, Django vous offre une API d’accès à la base de données générée
automatiquement ;
Base de données
Although you can use Django without a database, it comes with an object-relational
mapper in which you describe your database layout in Python code.
Héritage
M2i Django 3
Migrations
Les migrations sont la manière par laquelle Django propage des modifications que
vous apportez à des modèles (ajout d’un champ, suppression d’un modèle, etc.)
dans un schéma de base de données.
En outre, MySQL réécrit entièrement les tables pour presque toutes les opérations
de schéma et a généralement besoin d’un temps d’exécution proportionnel au
nombre de lignes des tables pour ajouter ou supprimer des colonnes. Sur une
machine un peu lente, cela peut prendre plus d’une minute par million de lignes ;
l’ajout de quelques colonnes à une table de quelques millions d’entrées pourrait
bloquer votre site pendant plus de dix minutes.
Enfin, MySQL a des tailles limites relativement petites pour la longueur des noms
de colonnes, tables et index, ainsi qu’une limite sur la taille combinée de toutes les
colonnes qu’un index recouvre. Cela signifie que des index qui sont possibles sur
d’autres bases de données ne pourront pas toujours être créés avec MySQL.
URLs
A table of contents for your app, it contains a mapping between URL patterns and
Python callback functions.
M2i Django 4
from django.urls import path
urlpatterns = [
path('articles/<int:year>/', views.year_archive),
path('articles/<int:year>/<int:month>/', views.month_archive),
path('articles/<int:year>/<int:month>/<int:pk>/', views.article_detail),
]
A view function, or “view” for short, is simply a Python function that takes a web
request and returns a web response. This response can be the HTML contents of a
Web page, or a redirect, or a 404 error, or an XML document, or an image, etc.
def hello(request):
text = """<h1>welcome to my app !</h1>"""
return HttpResponse(text)
Formulaires
GET et POST sont les seules méthodes HTTP à utiliser dans les formulaires.
Le formulaire de connexion de Django est renvoyé en utilisant la méthode POST , par
laquelle le navigateur regroupe les données du formulaire, les encode pour la
transmission, les envoie au serveur, puis reçoit la réponse en retour.
GET , en revanche, regroupe les données fournies dans une chaîne et l’utilise pour
composer une URL. L’URL contient l’adresse à laquelle les données doivent être
envoyées, ainsi que les clés et les valeurs fournies.
Toute requête pouvant être utilisée pour modifier l’état du système, par exemple
une requête qui applique des changements en base de données, devrait
M2i Django 5
utiliser POST . GET ne devrait être employée que pour des requêtes qui n’affectent
pas l’état du système.
Le navigateur saura alors qu’il doit renvoyer les données du formulaire vers
l’URL /your-name/ , en utilisant la méthode POST . Il affichera un champ de texte
libellé « Your name: » et un bouton intitulé « OK ». Si le contexte de gabarit contient
une variable current_name , celle-ci sera utilisée pour pré-remplir le champ your_name .
Lorsque le formulaire aura été envoyé, la requête POST envoyée au serveur
contiendra les données du formulaire.
class NameForm(forms.Form):
your_name = forms.CharField(label='Your name', max_length=100)
ou :
class Category():
#chaque champ du formulaire
#...
#...
M2i Django 6
redirect() & render()
redirect() : Renvoie une réponse HttpResponseRedirect à l’URL correspondant aux
paramètres transmis.
render() : The render() function has two mandatory arguments you must pass to it
when calling the function. These are the request, and template_name parameters.
Admin
Sécurité
Django intègre tout un système de configuration.
API REST
Django REST Framework est une librairie pour facilite l'implémentation des API.
A REST API is a standardized way to provide data to other applications. Those
applications can then use the data however they want. Sometimes, APIs also offer
a way for other applications to make changes to the data.
Un endpoint est une URL sur laquelle on réalise différents appels. Selon la
méthode HTTP utilisée (GET, POST, PATCH, DELETE), une partie de code va être
exécutée et retourner un résultat.
To do list pour créer une REST API :
1. Set up Django
2. Create a model in the database that the Django ORM will manage
Serialize class
M2i Django 7
Serializers in Django REST Framework are responsible for converting objects into
data types understandable by javascript and front-end frameworks. Serializers also
provide deserialization, allowing parsed data to be converted back into complex
types, after first validating the incoming data. The serializers in REST framework
work very similarly to Django’s Form and ModelForm classes. The two major
serializers that are most popularly used
are ModelSerializer and HyperLinkedModelSerialzer.
https://www.geeksforgeeks.org/serializers-django-rest-framework/
Mixins
Les mixins permet de faire des hiérarchies d'héritage. C'est une classe qui contient
une combinaison de méthodes d'autres classes.
:
staticfiles
@login_required
@user_passes_test
is_valid : You need to call is_valid during deserialization process before write data to
DB. is_valid perform validation of input data and confirm that this data contain all
required fields and all fields have correct types. If validation process
succeded is_valid set validated_data dictionary which is used for creation or updating
data in DB. Otherwise serializer's property errors will contain information about errors
in input data, and you can send this information as HTTP response in your view.
M2i Django 8