Django, une app à la fois 28


Hello gens.

Pendant ma petite absence, j’ai concocté un nouveau concept : les cookbooks exécutables autonomes à sens giratoire inversé.

Le principe est simple, je fournis une liste de recettes sous forme de code commenté qui fonctionne, et qui font une tâche commune.

Je vais commencer par Django, car il en a vraiment besoin. Voici donc, “Django, une app à la fois“, disponible en anglais et en français.

Il n’y a rien à faire sinon télécharger le truc, et le lancer, puis faire mumuse avec. Quand on veut savoir comment un snippet marche, on regarde les sources.

Pour le moment il n’y a que deux apps et un fichier de settings commentés avec amour. Néanmoins le but est d’ajouter de temps en temps une app par ci, par là.

Si la formule a du succès, je le ferai pour d’autres outils : Python pur, fabric, bottle, south, que sais-je.

28 thoughts on “Django, une app à la fois

  • foxmask

    Tu comptes faire d’autres apps courtes dans ce genre ?
    Ou tu attends qu’on t’en propose ?
    j’ai peur de ne pas avoir tout compris à ce que tu proposes

  • foxmask

    ok :)
    si tu veux, j’ai fait joujou avec une app “rikikite pouce-pouce” que j’ai refaite en flask et bottle (juste pour voir comment on pouvait faire la même chose avec 3 framework differents). Si tu la juges assez pédagogue ( je peux davantage commenter ) c’est ce bidule. Si t’en veux pas / que ca colle pas à l’esprit de ton truc, whatever, let me know je m’offusquerai pas :)

  • Sam Post author

    Pour ce projet là non, car le but est d’avoir une feature par app, en commençant par les features de base.

    En revanche, ça peut être très interessant d’avoir un article présentant les 3 manières de faire, code à l’appui.

  • Tontof

    Juste pour préciser parce que je ne l’ai pas vu écrit et que ça peut être déroutant pour les débutants mais c’est du python3 et il faut lancer python ./manage.py runserver ou python3 ./manage.py runserver pour pouvoir accéder à http://127.0.0.1:8000/

    Dans l’article le lien est mal passé et dans ce commentaire il ne passe pas bien à cause du double – qui se transforme en –
    Django, une app à la fois

  • Sam Post author

    Ce n’est pas du python 3, c’est du Python 2. Mais django accepte python 2 et 3 de toute façon en version 1.5.

  • freakz0id

    Lorsque je lance la commande “python manage.py”, j’ai
    “Usage: manage.py subcommand [options] [args]”, comme s’il manquait une commande. C’est grave docteur ?

  • Sam Post author

    C’est de ma faute, j’ai fais une typo dans la commande.

    Ca a été corrigé.

    La bonne commande est “python manage.py runserver”

  • Djiko

    Bégaiement du doigt ? Le lien est erroné :) (outre le fait qu’il est mal formaté dans l’article WordPress)

    Sinon :
    autonomes a sens -> autonomes à sens
    deux apps, et un -> deux apps et un
    je le ferais -> je le ferai

    Après le coup de bâton, la caresse : je salue l’idée. Les snippets, c’est bon, mangez en :) .

  • Tontof

    Arf, j’avoue ne pas avoir regardé le code pour dire si c’était du python 2 ou du python 3 mais chez moi j’obtiens avec python 2.7 :

    Traceback (most recent call last):
    File "manage.py", line 7, in
    import project.settings
    File ".../project/settings.py", line 47, in
    APPS_DIR = os.path.join(ROOT_DIR, 'apps')
    File "/usr/lib/python2.7/posixpath.py", line 71, in join
    path += '/' + b
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 11: ordinal not in range(128)

  • Sam Post author

    @Djiko: j’ai réparé plusieurs liens cassés, il en reste ?

    @Tontof: bien vu, ma config ne prenait pas en compte les accents dans le chemin du dossier et c’est une bonne chose de le voir maintenant car quasiment aucune ressource sur le net n’explique comment le faire. J’ai modif le code et normalement ça devrait le faire. Tu confirmes ?

  • Djiko

    @Sam : non, je suis tombé dans une faille spacio-temporelle quand j’ai écris mon commentaire (vive les onglets ouverts trois jours avant d’en lire le contenu :D )

  • 01ivier

    Chouette…

    Je suis en train de suivre le tuto du site du zéro (en quasi ligne droite, je le recommande) et la seule chose qui me manquait, c’était le code de Django commenté en français… :-p
    Voilà qui est fait…

    Très gros bouleau… merci…

    J’ai un peu cherché pour découvrir le coup du path.py et avoir ainsi toutes ses applis dans un dossier…
    Compte-tenu de l’objectif de l’exercice, il est possible que cela rajoute un niveau de complexité dans la compréhension des chemins pas forcément salutaire…
    En, même temps, je suis bien content d’avoir eu l’occasion de comprendre le truc… :-)

    Enfin, simple remarque, “Une appli après l’autre” collerai peut-être plus à l’esprit du projet…

    Merci encore pour le taff…

  • Sam Post author

    Ouai j’ai hésité à le faire mais je me suis dis, tant pis, il va y avoir 40 apps à la fin, j’ai pas envi de tout mettre à la racine.

  • chrs

    Salut,

    Super merci ton ton travail, cela aide beaucoup… Mais, car comme tu le sais il y a toujours un mais ;)

    Grace à l’app3_basic_routing, je comprend mieux comment cela fonctionne. dans tes exemple, tu utilises des liens du type :

    a href="./hello_from_app1/">./hello_from_app1/</>: et ça je sais faire. là ou je ne sais plus c’est quand je fait :

    def logon(request):

    username = request.POST['user']

    password = request.POST['pword']

    user = authenticate(request, username=username, password=password)
    if user is not None:
      login(request, user)
      return redirect(request, 'accueil/index.html', {})
    else :
       print("que dale")
    

    impossible de faire la redirection, soit il ne fait rien, soit il me fait ça :

    NoReverseMatch at /logon/

    Reverse for ” not found. ” is not a valid view function or pattern name.

    si tu as un idée je suis preneur

    le url.py au passage :

    from django.urls import path, re_path

    from . import views

    from accueil.views import index as accueil_index

    from django.views.generic.base import RedirectView

    urlpatterns = [

    path('', views.index, name='index'),

    path('logon', views.logon, name='logon'),

    path('index',accueil_index, name='index'),

    ]

    merci

    christophe

    • Sam Post author

      redirect() prend en premier paramètre soit:

      – un objet qui a une méthode “get_absolute_url()” qui retourn un url sous forme de string
      – une string qui représente une url absolue. Ex: ‘/toto’
      – une string qui représente le nom d’une url dans ton url.py. Ex: si tu as mis name=”foo”, tu peux mettre “foo”.

      Toi tu passe ici un objet request, ce qui n’a rien à voir avec la choucroute.

    • chrs

      Salut Sam,
      Merci pour ta réponse, j’avais compris juste après t’avoir envoyer la question… pourtant c’est bon la choucroute…
      Merci encore, et continue tu nous donner de bons conseils
      Christophe

Leave a comment

Your email address will not be published. Required fields are marked *

Utilisez <pre lang='python'>VOTRE CODE</pre> pour insérer un block de code coloré

Des questions Python sans rapport avec l'article ? Posez-les sur IndexError.