blabla@django

blabla@django - Python - Programmation

Marsh Posté le 14-02-2011 à 14:43:18    

hop, c'est fait.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 14-02-2011 à 14:43:18   

Reply

Marsh Posté le 14-02-2011 à 14:44:34    

if settings.DEBUG:
    urlpatterns += patterns('',
                            (r'^static/(?P<path>.*)$', 'django.views.static.serve',
                             {'document_root': settings.STATIC_DOC_ROOT}),
                            (r'^media/(?P<path>.*)$', 'django.views.static.serve',
                             {'document_root': settings.MEDIA_ROOT}),
                            )


dites, l'indentation est pas sensée compter ? pourquoi PyCharm me met qu'un espace de décalage avant les '{' ? c'est chiant, je le vois pas.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 14-02-2011 à 15:05:14    

nraynaud a écrit :

Code :
  1. if settings.DEBUG:
  2.    urlpatterns += patterns('',
  3.                            (r'^static/(?P<path>.*)$', 'django.views.static.serve',
  4.                             {'document_root': settings.STATIC_DOC_ROOT}),
  5.                            (r'^media/(?P<path>.*)$', 'django.views.static.serve',
  6.                             {'document_root': settings.MEDIA_ROOT}),
  7.                            )


dites, l'indentation est pas sensée compter ?


Pas dans des parenthèses, ça serait con

nraynaud a écrit :

pourquoi PyCharm me met qu'un espace de décalage avant les '{' ? c'est chiant, je le vois pas.


Il met tous les params au même étage, mets la chaîne vide à la ligne.

Message cité 1 fois
Message édité par masklinn le 14-02-2011 à 15:05:58

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 14-02-2011 à 15:10:55    

masklinn a écrit :


Pas dans des parenthèses, ça serait con


admettons (j'te révoquerai des cartes du NSDAP moi ...)
 

masklinn a écrit :

Il met tous les params au même étage, mets la chaîne vide à la ligne.


il me garde quand même qu'un espace d'écart pour la continuation.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 14-02-2011 à 15:13:07    

nraynaud a écrit :


il me garde quand même qu'un espace d'écart pour la continuation.


L'espace c'est pas un truc con genre "y'a toujours un espace après une virgule dans un tuple" ?


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 14-02-2011 à 15:16:52    

nraynaud a écrit :


il me garde quand même qu'un espace d'écart pour la continuation.


Ah oui j'ai ratal que tu t'étonnais sur le contenu des tuples

 

Il aligne le dict avec le premier élément du tuple (la chaîne) pas avec la parentèse d'ouverture du tuple (qui donnerait l'impression que ton dict est en dehors)

 

Si tu utilisais url tu voudrais pas:

Code :
  1. url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
  2. {'document_root': settings.STATIC_DOC_ROOT})


si?


Message édité par masklinn le 14-02-2011 à 15:19:09

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 14-02-2011 à 15:24:09    

non, je voudrai

if settings.DEBUG:
    urlpatterns += patterns('',
                            (r'^static/(?P<path>.*)$', 'django.views.static.serve',
                                 {'document_root': settings.STATIC_DOC_ROOT}),
                            (r'^media/(?P<path>.*)$', 'django.views.static.serve',
                                {'document_root': settings.MEDIA_ROOT}),
                            )


pour pas rater la continuation
mais c'est bizarre, j'ai "continuation" à 8 dans pycharm et pourtant il tente un alignement.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 14-02-2011 à 15:30:41    

nraynaud a écrit :

non, je voudrai

if settings.DEBUG:
    urlpatterns += patterns('',
                            (r'^static/(?P<path>.*)$', 'django.views.static.serve',
                                {'document_root': settings.STATIC_DOC_ROOT}),
                            (r'^media/(?P<path>.*)$', 'django.views.static.serve',
                                {'document_root': settings.MEDIA_ROOT}),
                            )


pour pas rater la continuation
mais c'est bizarre, j'ai "continuation" à 8 dans pycharm et pourtant il tente un alignement.


Mais à ce moment là ce serait

if settings.DEBUG:
    urlpatterns += patterns('',
                               (r'^static/(?P<path>.*)$', 'django.views.static.serve',
                                   {'document_root': settings.STATIC_DOC_ROOT}),
                               (r'^media/(?P<path>.*)$', 'django.views.static.serve',
                                   {'document_root': settings.MEDIA_ROOT}),
                            )


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 14-02-2011 à 15:34:11    

oui voilà, ben comment j'ai ça ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 14-02-2011 à 15:36:02    

J'en sais rien je connais pas pyCharm  [:raph0ux]


---------------
Au royaume des sourds, les borgnes sont sourds.
Reply

Marsh Posté le 14-02-2011 à 15:36:02   

Reply

Marsh Posté le 14-02-2011 à 15:45:41    

Chais pas non plus.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 14-02-2011 à 15:50:16    

R3g a écrit :

J'en sais rien je connais pas pyCharm  [:raph0ux]


[:violence faite à la personne]


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 14-02-2011 à 17:06:17    

dites les gens, dans mon modèle j'ai :

class Map(models.Model):
    attached_file = models.FileField(upload_to='attachments')
    mimetype = models.CharField(max_length=64, editable=False)
    created = models.DateTimeField(auto_now_add=True, editable=False)
    updated = models.DateTimeField(auto_now=True, auto_now_add=True, editable=False)

 

   def file_url(self):
        return default_storage.url(self.attached_file.name)

 

dans maintenant, dans ma vue, je veux l'URL publique absolue du fichier (c'est un kml et google maps aime pas trop les trucs relatifs), comment je fais ?

 

pour l'instant j'ai :


{{ object.file_url }}


mais ça me renvoie juste "attachments/lol.kmz" au lieu de http://blabla...

 

edit : réponse:  il faut configurer MEDIA_URL dans settings.py


Message édité par nraynaud le 14-02-2011 à 17:13:24

---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 14-02-2011 à 17:35:46    

dites les guignols, j'ai une variable de config (SITE_URL) qui est différente entre la prod et le dev, mais tout le reste de la conf est le même mais qui en dépend (MEDIA_URL = SITE_URL + 'media/').
 
comment vous gérez ça ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 14-02-2011 à 18:07:57    

Chais pas trop comment faire un truc élégant, mais sinon un truc du genre devrait marchouiller :

 

settings_base.py

Code :
  1. def make_conf(conf, site_url):
  2.   conf.MEDIA_URL = site_url + 'media/'
 

settings.py

Code :
  1. from settings_base import make_conf
  2. make_conf(globals(), 'www.plop.fr/')
 

settings_dev.py

Code :
  1. from settings_base import make_conf
  2. make_conf(globals(), 'localhost/')

Message cité 1 fois
Message édité par 0x90 le 14-02-2011 à 18:08:36

---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 14-02-2011 à 19:05:09    

nraynaud a écrit :

dites les guignols, j'ai une variable de config (SITE_URL) qui est différente entre la prod et le dev, mais tout le reste de la conf est le même mais qui en dépend (MEDIA_URL = SITE_URL + 'media/').
 
comment vous gérez ça ?


J'ai vu deux options en gros :
1) Soit tu utilises deux settings, un pour le dev, un pour la prod et en dev tu charges ton serveur avec un :

Code :
  1. django-admin.py runserver --settings=monsite.settings_dev


2) Soit tu modifies le settings.py pour aller chercher la valeur des options dans un fichier de conf externe, via une petite fonction type celle de 0x90. Nous on a ça, avec un seul fichiers de conf (non versionné - enfin le squelette est versionné pour les nouveaux -). Chaque poste modifie son .conf avec ses chemins, IP, port etc...

Reply

Marsh Posté le 14-02-2011 à 19:21:28    

drap


---------------
Jubi Photos : Flickr - 500px
Reply

Marsh Posté le 15-02-2011 à 06:48:52    

http://stackoverflow.com/questions [...] r-hostname
ça a l'air intéressant


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 15-02-2011 à 10:19:54    

Ceux qui font du django, c'est quoi vos plugins favoris ?
 
Pour l'instant j'ai
 * south pour la migration de schéma/données,  utilisé sur plusieurs projets
 * django debug toolbar, mais tellement obvious celui là :D
 
Et pour différents projets persos, je suis en train de jouer avec
 * django-compress pour tout ce qui est gestion du CSS/JS
 * django-celery pour gérer des tâches asynchrones (pour remplacer tout ce qui devrait être fait via du crontab c'est pas mal notamment)
 
Qui m'a foi m'ont l'air pas mal du tout (mais très peu de recul sur ces deux là, projets persos pas encore online)

Reply

Marsh Posté le 15-02-2011 à 10:23:54    

0x90 a écrit :

Chais pas trop comment faire un truc élégant, mais sinon un truc du genre devrait marchouiller :
 
settings_base.py

Code :
  1. def make_conf(conf, site_url):
  2.   conf.MEDIA_URL = site_url + 'media/'


 
settings.py

Code :
  1. from settings_base import make_conf
  2. make_conf(globals(), 'www.plop.fr/')


 
settings_dev.py

Code :
  1. from settings_base import make_conf
  2. make_conf(globals(), 'localhost/')



 

SekYo a écrit :


J'ai vu deux options en gros :
1) Soit tu utilises deux settings, un pour le dev, un pour la prod et en dev tu charges ton serveur avec un :

Code :
  1. django-admin.py runserver --settings=monsite.settings_dev


2) Soit tu modifies le settings.py pour aller chercher la valeur des options dans un fichier de conf externe, via une petite fonction type celle de 0x90. Nous on a ça, avec un seul fichiers de conf (non versionné - enfin le squelette est versionné pour les nouveaux -). Chaque poste modifie son .conf avec ses chemins, IP, port etc...


dites, est-ce que je peux passer ma valeur particulière par une variable d'environnement vers une variable de settings.py ? j'ai l'impression que mod_wsgi et pycharm me permettent tous les 2 d'en passer une.
comment je la récupère dans django ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 15-02-2011 à 10:29:45    

C'est dans le link que t'as drop plus haut sur Stack :D

Code :
  1. import os
  2. os.environ


Où os.environ est un dictionnaire.
 
 
NB : Au fait, tu devrais essayer le shell ipython, a mon avis plus sympa que le shell de base.

Reply

Marsh Posté le 15-02-2011 à 10:36:09    

merci


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 15-02-2011 à 11:01:36    

nraynaud a écrit :


dites, est-ce que je peux passer ma valeur particulière par une variable d'environnement vers une variable de settings.py ? j'ai l'impression que mod_wsgi et pycharm me permettent tous les 2 d'en passer une.
comment je la récupère dans django ?


 
Tu va préférer une variable global sur tout le processus plutôt qu'un appel de fonction ? étrange.


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 15-02-2011 à 20:52:07    

nraynaud a écrit :


dites, est-ce que je peux passer ma valeur particulière par une variable d'environnement vers une variable de settings.py ? j'ai l'impression que mod_wsgi et pycharm me permettent tous les 2 d'en passer une.
comment je la récupère dans django ?


en fait c'est nul comme idée parce que le manage.py a besoin de la variable après car il lit le settings.py.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 15-02-2011 à 22:45:41    

dites, sur ma machine de test, j'ai les css de l'admin qui s'affichent bien, mais sur celle de prod, elles s'affichent pas.
 
la conf est la même sur les 2:


MEDIA_ROOT = os.path.join(ROOT_PATH, 'media')
 
MEDIA_URL = SITE_URL +'media/'
 
ADMIN_MEDIA_PREFIX = '/admin_media/'


et sur le site de prod, avec le debug activé, j'ai :

Using the URLconf defined in urls, Django tried these URL patterns, in this order:
^admin/
^map/
^$
^subscribe/subscribe$
^static/(?P<path>.*)$
^media/(?P<path>.*)$
The current URL, admin_media/css/base.css, didn't match any of these.


ce qui peut paraître logique, mais  
1) en local j'ai pas non plus admin_media dans le url.py et j'ai mes CSS (donc je peux pas débugger)
2) dans le code du serveur HTTP, il a l'air de router de manière un peu forcée les requêtes vers ADMIN_MEDIA_PREFIX (ce que j'ai l'impression de comprendre de la dernière classe dans basehttp.py)
 
any idea ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 15-02-2011 à 22:51:50    

Hum curieux., mais c'est vrai que les ADMIN_MEDIA & co sont assez chiants. Tu peux pas simplement ajouter admin_media dans le urls.py pour qu'il soit servi via le django.views.static.serve ?
 
Ceci étant, en prod, une bonne technique est de mapper tes dossiers de fichiers statiques directement dans la conf de apache/nginx pour qu'ils soient servis direct par le serveur web, sans passer par django. Les perfs n'ont rien à voir :D

Reply

Marsh Posté le 15-02-2011 à 22:55:25    

ouais, on me l'a déjà dit, mais avant de complexifier encore plus le déploiement, j'aimerai avoir un peu de fonc.
 
je peux tenter le truc static, mais j'aurai aimé avoir un peux de feedback d'abord.
elle sont loggées où les erreurs par défaut dans mod_wsgi ?


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 15-02-2011 à 23:05:55    

http://docs.djangoproject.com/en/d [...] dmin-files

 

Au passage, depuis la version 1.3 de django (enfin la dev) django-staticfiles a été intégré, et ce truc permet (entre autre) de gérer static/ et media/ de manière automatique comme c'est le cas pour admin-media/, c'est peut-être plus clean que la vue statique à coup de "if settings.DEBUG". En bonus ça gère le rangement des fichiers statiques par app, et c'est bien cool :o

Message cité 1 fois
Message édité par 0x90 le 15-02-2011 à 23:07:42

---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 16-02-2011 à 09:15:34    

0x90 a écrit :

http://docs.djangoproject.com/en/d [...] dmin-files
 
Au passage, depuis la version 1.3 de django (enfin la dev) django-staticfiles a été intégré, et ce truc permet (entre autre) de gérer static/ et media/ de manière automatique comme c'est le cas pour admin-media/, c'est peut-être plus clean que la vue statique à coup de "if settings.DEBUG". En bonus ça gère le rangement des fichiers statiques par app, et c'est bien cool :o


ok, merci.
 
c'est relou ces serveurs qui se comportent différemment suivant le contexte pour débuter.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 16-02-2011 à 09:41:31    

nraynaud a écrit :


ok, merci.
 
c'est relou ces serveurs qui se comportent différemment suivant le contexte pour débuter.


 
J'avais jamais fait gaffe pour l'admin, c'est étonnant qu'ils aient laissé un truc magique comme ça dans django :/


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
Reply

Marsh Posté le 28-02-2011 à 12:19:16    

dites les jeunes, je veux mettre un ID aléatoire à mes entités, vous avez une idée de la chose ?
 
Ce que je trouve sur le net ne me plait pas trop, genre laisser l'ID séquentiel et utiliser un autre champ (mais y'a un risque de leaker les IDs quand même) ou hasher l'ID séquentiel (même pb).
 
Je voudrais générer un ID aléatoire en python, tenter de sauver le modèle comme ça et si ça fait une erreur de clef dupliquée re-tenter avec un autre ID.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 28-02-2011 à 12:43:54    

nraynaud a écrit :

dites les jeunes, je veux mettre un ID aléatoire à mes entités, vous avez une idée de la chose ?
 
Ce que je trouve sur le net ne me plait pas trop, genre laisser l'ID séquentiel et utiliser un autre champ (mais y'a un risque de leaker les IDs quand même) ou hasher l'ID séquentiel (même pb).
 
Je voudrais générer un ID aléatoire en python, tenter de sauver le modèle comme ça et si ça fait une erreur de clef dupliquée re-tenter avec un autre ID.


uuid?
 
Si tu utilises django-extensions il y a un UUIDField inclus normalement

Message cité 1 fois
Message édité par masklinn le 28-02-2011 à 12:48:03

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 28-02-2011 à 12:47:25    


trop long, c'est pour un truc genre imgur.com


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 28-02-2011 à 12:50:25    

nraynaud a écrit :


trop long, c'est pour un truc genre imgur.com


Section d'un hash d'un UUID alors? L'UUID fournit le random, mais je sais pas si tu peux les sectionner, par contre un hash tu peux normalement.
 
Sinon demandes à nazztazz comment il fait.
 
Ou alors, hash ou checksum de ta resource, comme ça t'as une détection de duplicats "gratos".

Message cité 1 fois
Message édité par masklinn le 28-02-2011 à 12:51:08

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 28-02-2011 à 13:01:05    

masklinn a écrit :


Section d'un hash d'un UUID alors? L'UUID fournit le random, mais je sais pas si tu peux les sectionner, par contre un hash tu peux normalement.
 
Sinon demandes à nazztazz comment il fait.
 
Ou alors, hash ou checksum de ta resource, comme ça t'as une détection de duplicats "gratos".


en fait ça répond pas à la question de comment je branche le merdier dans django et j'évite les duplications et les race conditions.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 28-02-2011 à 13:20:01    

nraynaud a écrit :

en fait ça répond pas à la question de comment je branche le merdier dans django


Tu crées un field custom qui va bien et tu le fous dans ton modèle avec primary_key=True?

nraynaud a écrit :

et j'évite les duplications et les race conditions.


Tu regardes si ça pète quand ça arrive en DB? Si c'est une PK ou une UNIQUE ça devrait être bon, et de toute façon si tu utilises un truc avec beaucoup d'entropie à la base il y a peu de chances que tu aies le problème.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 28-02-2011 à 13:29:21    

masklinn a écrit :


Tu crées un field custom qui va bien et tu le fous dans ton modèle avec primary_key=True?


de base si y'a collision le système fait un update (oui, il fait un roundtrip avant chaque requête pour savoir s'il update ou insert)
 

masklinn a écrit :


Tu regardes si ça pète quand ça arrive en DB? Si c'est une PK ou une UNIQUE ça devrait être bon, et de toute façon si tu utilises un truc avec beaucoup d'entropie à la base il y a peu de chances que tu aies le problème.


justement, comment je me branche dans le merdier ?  
 
Si je poste ici c'est pour avoir des pointeurs de doc ou du code, je suis assez grand pour l'algo, merci.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 28-02-2011 à 13:33:33    

nraynaud a écrit :

justement, comment je me branche dans le merdier ?

 

Si je poste ici c'est pour avoir des pointeurs de doc ou du code, je suis assez grand pour l'algo, merci.


Tu te fous de la gueule du monde un peu non? T'es "assez grand pour l'algo" mais t'es pas assez grand pour trouver une page appelée Writing custom model fields dans la doc officielle? Qui est le premier résultat quand tu colles "django custom field" dans google? Suivie de 2-3 tutos sur le sujet?

Message cité 1 fois
Message édité par masklinn le 28-02-2011 à 13:35:03

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 28-02-2011 à 13:37:42    

masklinn a écrit :


Tu te fous de la gueule du monde un peu non? T'es "assez grand pour l'algo" mais t'es pas assez grand pour trouver une page appelée Writing custom model fields dans la doc officielle? Qui est le premier résultat quand tu colles "django custom field" dans google?


peut-être que je n'ai pas trouvé sur cette page l'info que je cherche ?
 
peut-être que quelqu'un a une approche moins agressive et plus originale que ça dans django.
 
peut-être que tu me saoules, tu sais très bien que je capte rien à la bibliothèque, mais que maîtrise assez bien certains trucs, plus que ce que je vois dans le code du framework par exemple.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 28-02-2011 à 13:44:56    

nraynaud a écrit :

peut-être que je n'ai pas trouvé sur cette page l'info que je cherche ?


peut-être que dans ce cas tu auras pu l'indiquer? Parce que ta question "comment je me branche dans Django", la page semble assez bien y répondre. Si t'as un problème plus précis que ça, comment je peux savoir ce qu'il est si tu n'as rien dit à son sujet?

nraynaud a écrit :

peut-être que quelqu'un a une approche moins agressive et plus originale que ça dans django.


Moins aggressive et plus originale que "je veux un champ custom et il y a une page qui m'explique comment on crée un champ custom"?

nraynaud a écrit :

tu sais très bien que je capte rien à la bibliothèque


Non je le sais pas putain, comment tu veux que je le sache? Je sais pas comment tu fonctionnes précisément et django ne m'a jamais posé de problèmes personnellement, d'où je tirerais que "tu capte rien à la bibliothèque"? Ou à quoi dans la bibliothèque? D'autant plus quand j'ai tendance à pas te considérer comme étant con ou ayant des difficultés spécifiques, j'ai pas spécialement de raisons de penser ça et tes précédentes requêtes se placent assez largement dans un cadre "j'ai commencé à regarder ce truc il y a moins de 2 semaines donc je suis encore un peu paumé".

Message cité 1 fois
Message édité par masklinn le 28-02-2011 à 13:46:24

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed