Django – Gestion des utilisateurs

Authentification

authenticate()

from django.contrib.auth import
	
authenticate user = authenticate(username='john', password='secret')
if user is not None:
    if user.is_active:
        print "You provided a correct username and password!"
    else:
        print "Your account has been disabled!"
else:
    print "Your username and password were incorrect."

login()

    from django.contrib.auth import authenticate, login
	
    def my_view(request):
        username = request.POST['username']
        password = request.POST['password']
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                # Redirect to a success page.
            else:
                # Return a 'disabled account' error message
        else:
            # Return an 'invalid login' error message.

logout()

    from django.contrib.auth import logout
	
    def logout_view(request):
        logout(request)
        # Redirect to a success page.

Formulaires

form django.contrib.auth.forms import *
  • UserCreationForm()
  • UserChangeForm()
  • AuthentificationForm()
  • PasswordResetForm()
  • SetPasswordForm()
  • PasswordChangeForm()
  • AdminPasswordChangeForm()

Symfony – Faire des recherches avec sfFinder

Vous vous êtes surement déjà demandé comment rechercher un fichier ou un répertoire dans votre projet Symfony, sachez qu’il existe une classe prévu pour ca : sfFinder.

La classe sfFinder

Comme nous l’avons dis la classe sfFinder permet de rechercher des fichiers ou des repertoires dans votre projet, voyons comment cela fonctionne :

$files = sfFinder::type('file')
    ->relative()
    ->maxdepth(0)
    ->in('/home/netha/mes_fichiers');

Dans cet exemple $files nous retournera un array contenant tous les noms ( relative() ) des fichiers ( type(‘file’) ) de votre répertoire /home/netha/mes_fichiers ( in(‘/home/netha/mes_fichiers’) ).
Il suffit ensuite d’exploiter les résultats avec une boucle foreach pour extraire les données de l’array.

foreach ($files as $file):
    echo $file;
endforeach;

Voyons maintenant un peu plus en détail les méthodes offertes par sfFinder :

  • type() : peut prendre la valeur file, dir ou any pour rechercher respectivement des fichiers, des répertoires, ou les deux.
  • relative() : si il n’est pas préciser sfFinder retournera l’emplacement complet du fichier/répertoire depuis la racine de votre serveur, sinon on obtient uniquement le nom du fichier/répertoire.
  • maxdepth() : il indique si sfFinder doit rechercher dans les sous répertoires. Si il est à 0 on reste dans le répertoire courant, à 1 on explore le premier niveau de sous répertoire, à 2 le deuxième et ainsi de suite…
  • in() : indique le répertoire dans lequel on fait la recherche, vous pouvez utiliser sfConfig::get() pour récupérer l’emplacement des répertoires de votre projet
Source : API Symfony

Comment bloquer les publicités sur le web ?

Il existe une manière simple et efficace permettant de bloquer les publicités sur les site web, elle consiste a modifier le fichier hosts de façon à rediriger les serveurs hébergent la publicité vers une autre adresse IP.

Le fichier hosts (Wikipédia)

Le fichier hosts est un fichier utilisé par le système d’exploitation d’un ordinateur lors de l’accès à Internet. Son rôle est d’associer des noms d’hôtes à des adresses IP. Lors de l’accès à une ressource réseau par nom de domaine, ce fichier est consulté avant l’accès au serveur DNS et permet au système de connaître l’adresse IP associée au nom de domaine sans avoir recours à une requête DNS.

A quoi ressemble le fichier hosts

Votre fichier hosts se trouve dans le répertoire c:\windows\system32\drivers\etc\hosts, vous pouvez l’ouvrir avec le bloc note (notepad).
Voici à quoi doit ressembler le fichier par défaut (sous Windows XP/Vista/Seven) :

exemple de fichier host

Bloquer les publicités

Pour bloquer les publicités de rajouter les adresses des serveurs fournissant les contenus publicitaire et de les rediriger vers l’adresse IP 127.0.0.1, soit le localhost.

Télécharger le fichier hosts et échangé avec votre propre hosts, les modifications seront prises en compte immédiatement.

Symfony et la ligne de commande – Ecrire ses propres tâches (2)

Nous avons vu dans les deux billets précédents comment créer une tâche et comment gérer le « mode maintenance » sur ses applications. Voyons maintenant comment le activer ou désactiver le mode maintenance depuis la ligne de commande.

Dans notre exemple on considère que le namespace est « netha » et la tache « maintenance ».

Dans le fichier lib/task/nethaMaintenanceTask.class.php :

<?php
class nethaMaintenanceTask extends sfBaseTask
{
  protected function configure()
  {
    $this->addArguments(array(
      new sfCommandArgument('application', sfCommandArgument::REQUIRED, 'Application'),
    ));
	
    $this->namespace        = 'netha';
    $this->name             = 'maintenance';
    $this->briefDescription = 'Gestion du mode maintenance';
    $this->detailedDescription = <<<EOF
The [netha:maintenance|INFO] task does things.
Call it with:
	
 [php symfony netha:maintenance|INFO]
EOF;
  }
	
  protected function execute($arguments = array(), $options = array())
  {
    $file = sfConfig::get('sf_data_dir').'/lock/'.$arguments['application'].'.lck';
    if (file_exists($file))
    {
      if (unlink($file))
      {
        $this->logSection('info', 'Mode maintenance inactif.');
      }
    }
    else
    {
      if (is_readable(sfConfig::get('sf_data_dir').'/lock'))
      {
        file_put_contents($file, array());
        $this->logSection('info', 'Mode maintenance actif.');
      }
    }
  }
}

A partir de maintenant la commande php.exe symfony netha:maintenance mon_application vous permettra de gérer le passage en mode maintenance.

Symfony et la ligne de commande – Ecrire ses propres tâches (1)

Introduction

Une tâche s’exécute directement depuis une interface en ligne de commande en utilisant le script php symfony présent à la racine du projet. N’importe quel développeur ayant déjà développé sous Symfony a un jour utilisé les taches depuis la ligne de commande en exécutant par exemple la célèbre tache php.exe symfony cc

Symfony fournit nativement un large choix de jeux de tâches automatiques pour une grande variété d’usages. Il est possible d’obtenir une liste complète de toutes les tâches disponibles en exécutant le script symfony sans lui fournir la moindre option ou argument.

$ php.exe symfony

Vous aurez certainement remarqué que les tâches sont groupées sous des espaces de nom. Les noms des tâches sont généralement composés d’un espace de nom et d’un nom, séparés par un caractère « : ». Certaines commandes spéciales telles que help et list dérogent à la règle car elles sont exemptes d’espace de nom.

Ce schéma de nommage permet de catégoriser facilement les tâches les unes par rapport aux autres, et il s’agira plus tard de choisir un espace de nom pertinent pour chaque nouvelle tâche développée.

Ecrire ses propres tâches

Une commande Symfony permet de créer directement la nouvelle tache que l’on souhaite ajouter mais pour détailler au mieux le fonctionnement nous allons tout faire manuellement.

Commençons par créer un répertoire hello/ dans lib/task/, on ajoute ensuite le fichier helloWorldTask.class.php

// lib/task/hello/helloWorldTask.class.php
class helloWorldTask extends sfBaseTask
{
  public function configure()
  {
    $this->namespace = 'hello';
    $this->name      = 'world';
  }
	
  public function execute($arguments = array(), $options = array())
  {
    echo 'Hello World!';
  }
}

Si on exécute la commande

 php.exe symfony hello:world

On obtient

Hello World!

Le seul but de cette tâche est d’imprimer la chaîne Hello World! dans la console. C’est déjà un bon point de départ ! Bien sûr, les tâches ne servent pas seulement à afficher du contenu dans la console directement avec les fonctions echo ou print.

Etendre la classe abstraite sfBaseTask permet ainsi au développeur de bénéficier d’autres méthodes pratiques, telles que log() qui remplit exactement le même besoin, à savoir afficher du contenu.

public function execute($arguments = array(), $options = array())
{
  $this->log('Hello World!');
}

Vous avez probablement remarqué la présence des deux arguments transmis à la méthode execute(), $arguments et $options. Ces deux variables servent à contenir tous les arguments et options passés à la tâche à l’exécution. Nous détaillerons ces variables dans une prochaine partie.

public function configure()
{
  $this->addArgument('who', sfCommandArgument::OPTIONAL, 'What is your name?', 'Symfony');
}
	
public function execute($arguments = array(), $options = array())
{
  $this->log($arguments['who'].' say Hello World!');
}

On relance la commande pour observer le résultat

php.exe symfony hello:world John

A ce stade vous devriez etre en mesure de débuter vos première taches, une seconde partie viendra compléter cet article avec notamment les arguments et les options passés à une commande.