English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Comme mentionné précédemment, nous pouvons utiliser des cookies pour stocker une grande quantité de données utiles dans le client d'une application Web. Nous avons vu que les cookies peuvent stocker divers types de données dans une application Web, ce qui est très utile. Cela soulève l'importance de sauvegarder les données et des problèmes de sécurité.
Pour des raisons de sécurité, Django dispose d'un cadre de session pour gérer les cookies. La session est utilisée pour abstraire l'envoi et la réception de cookies, les données étant stockées sur le serveur (comme dans une base de données), tandis que le cookie client ne contient que l'ID de session. La session aide également à éviter que les utilisateurs ne définissent leur navigateur pour ne pas accepter les cookies.
Dans Django, le paramétrage des sessions est effectué dans le fichier settings.py du projet, en ajoutant quelques lignes aux options MIDDLEWARE_CLASSES et INSTALLED_APPS. Cela doit être fait après la création du projet, mais c'est toujours facile à comprendre, donc MIDDLEWARE_CLASSES devrait ressembler à ce qui suit -
# Fichier : example.py # Copyright : 2020 Par w3codebox # Auteur par : fr.oldtoolbag.com # Date : 2020-08-08 'django.contrib.sessions.middleware.SessionMiddleware'
INSTALLED_APPS doit inclure -
# Fichier : example.py # Copyright : 2020 Par w3codebox # Auteur par : fr.oldtoolbag.com # Date : 2020-08-08 'django.contrib.sessions'
Par défaut, Django enregistre les informations de session dans la base de données (table django_session ou collection), mais il est possible d'utiliser d'autres méthodes pour stocker les informations, telles que dans un fichier ou dans un cache.
Lorsque la session est activée, chaque requête (dans Django pour tout ce qui est le premier paramètre) a une propriété de session (dictionnaire).
Créons un exemple simple pour voir comment créer et enregistrer une session. Nous avons déjà vu un système de connexion simple (voir les chapitres sur le traitement des formulaires et le traitement des cookies dans Django). Enregistrons le nom d'utilisateur dans un cookie. Donc, si vous ne vous déconnectez pas, lorsque vous accédez à notre page de connexion, vous ne verrez pas le formulaire de connexion. En utilisant les cookies pour enregistrer les informations de session sur le serveur dans Django, cela est plus sûr.
Pour cela, changeons d'abord le code de connexion pour enregistrer le username sur le serveur-
# Fichier : example.py # Copyright : 2020 Par w3codebox # Auteur par : fr.oldtoolbag.com # Date : 2020-08-08 def login(request): username = 'not logged in' if request.method == 'POST': MyLoginForm = LoginForm(request.POST) if MyLoginForm.is_valid(): username = MyLoginForm.cleaned_data['username'] request.session['username'] = username else: MyLoginForm = LoginForm() return render(request, 'loggedin.html', {'username' : username}
Alors, laissons créer la vue correspondant au formulaire de connexion, si le cookie est configuré, le formulaire ne sera pas affiché -
# Fichier : example.py # Copyright : 2020 Par w3codebox # Auteur par : fr.oldtoolbag.com # Date : 2020-08-08 def formView(request): if request.session.has_key('username'): username = request.session['username'] return render(request, 'loggedin.html', {'username' : username}) else: return render(request, 'login.html', {})
Maintenant, laissons modifier le fichier url.py et changer l'URL, afin de correspondre à la nouvelle vue −
# Fichier : example.py # Copyright : 2020 Par w3codebox # Auteur par : fr.oldtoolbag.com # Date : 2020-08-08 from django.conf.urls import patterns, url from django.views.generic import TemplateView urlpatterns = patterns('myapp.views', url(r'^connection/','formView', name = 'loginform'), url(r'^login/', 'login', name = 'login'))
lorsque vous accédez /myapp/connection, vous verrez la page suivante−
vous serez redirigé vers la page suivante -
Maintenant, si vous essayez à nouveau d'accéder/myapp/connection, elle redirigera directement vers l'écran suivant.
Laisons-nous créer une vue de déconnexion simple, utilisée pour effacer les cookies.
# Fichier : example.py # Copyright : 2020 Par w3codebox # Auteur par : fr.oldtoolbag.com # Date : 2020-08-08 def logout(request): try: del request.session['username'] except: pass return HttpResponse("<strong>You are logged out.</strong>")
et dans myapp/URL de désactivation correspondante dans url.py
# Fichier : example.py # Copyright : 2020 Par w3codebox # Auteur par : fr.oldtoolbag.com # Date : 2020-08-08 url(r'^logout/', 'logout', name = 'logout'),
Maintenant, si vous accédez/myapp/logout, vous obtiendrez la page suivante-
si vous accédez à nouveau /myapp/connection,formulaires de connexion obtenus (écran1)。
Nous avons vu comment stocker et accéder aux sessions, voici un exemple de bonne pratique pour comprendre les attributs de session de la requête et d'autres opérations utiles :
set_expiry ( value ) − Définit le temps d'expiration de la session
get_expiry_age() − Retourne le nombre de secondes restantes avant l'expiration de la session
get_expiry_date() − Retourne la date d'expiration de la session actuelle
clear_expired() − Supprime les éléments de stockage de session expirés
get_expire_at_browser_close() − Retourne true ou false, cela dépend de si le cookie de session de l'utilisateur a expiré lors de la fermeture du navigateur Web de l'utilisateur