Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1613 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3  4  5  6  7  8
Auteur Sujet :

blabla@django

n°2060032
masklinn
í dag viðrar vel til loftárása
Posté le 28-02-2011 à 13:44:56  profilanswer
 

Reprise du message précédent :

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
mood
Publicité
Posté le 28-02-2011 à 13:44:56  profilanswer
 

n°2060035
nraynaud
lol
Posté le 28-02-2011 à 13:51:21  profilanswer
 

masklinn a écrit :


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?


 

masklinn a écrit :


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"?


 
J'ai pas parlé de champ custom parce que je voulais pas fermer la discussion là-dessus. Là où je voulais fermer c'est sur le round-trip, parce qu'avec un round-trip t'as plus la possibilité d'utiliser 2 serveur web pour une base de données. C'est à la base de décider de manière atomique si l'ID est unique et de l'insérer ou de tout refuser.


---------------
trainoo.com, c'est fini
n°2060037
SekYo
Posté le 28-02-2011 à 13:56:35  profilanswer
 

Approche alternative au champ custom, un champ Integer ou CharField, avec le paramètre primary_key à True et avec en paramètre default un callable. Il me semble que dans ce cas là la fonction prend en paramètre l'instance en court de sauvegarde et doit retourner la valeur du champ.
 
NB : Note que c'est une piste, jamais testé encore.

n°2060041
nraynaud
lol
Posté le 28-02-2011 à 13:59:43  profilanswer
 

SekYo a écrit :

Approche alternative au champ custom, un champ Integer ou CharField, avec le paramètre primary_key à True et avec en paramètre default un callable. Il me semble que dans ce cas là la fonction prend en paramètre l'instance en court de sauvegarde et doit retourner la valeur du champ.
 
NB : Note que c'est une piste, jamais testé encore.


justement j'ai regardé ça, mais il me faut de l'expertise, parce qu'en cas de collision sur une création, le système va faire sa requête, voir que l'ID existe, et transformer l'insert en update.
 
Y'a un paramètre dans save() pour forcer un insert, mais comment je récupère les choses en cas de collision ? j'ai pas trouvé le détail dans la doc.

Message cité 1 fois
Message édité par nraynaud le 28-02-2011 à 14:01:01

---------------
trainoo.com, c'est fini
n°2060042
masklinn
í dag viðrar vel til loftárása
Posté le 28-02-2011 à 14:01:28  profilanswer
 

nraynaud a écrit :

Là où je voulais fermer c'est sur le round-trip, parce qu'avec un round-trip t'as plus la possibilité d'utiliser 2 serveur web pour une base de données. C'est à la base de décider de manière atomique si l'ID est unique et de l'insérer ou de tout refuser.


Normalement le round-trip est pas gênant tant que tout est fait dans la même transaction et que le check initial est fait correctement (e.g. select for update), si on ignore le délai induit par le round-trip (si les serveurs sont sur des machines différentes et que le réseau est lent)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2060043
nraynaud
lol
Posté le 28-02-2011 à 14:03:38  profilanswer
 

masklinn a écrit :


Normalement le round-trip est pas gênant tant que tout est fait dans la même transaction et que le check initial est fait correctement (e.g. select for update), si on ignore le délai induit par le round-trip (si les serveurs sont sur des machines différentes et que le réseau est lent)


ça dépend du degré d'isolation des transactions.
 
dans mon cas c'est ok je pense, même en phantom read, mais dans le cas d'un update légitime ça doit pas toujours très bien se passer.


---------------
trainoo.com, c'est fini
n°2060044
SekYo
Posté le 28-02-2011 à 14:05:41  profilanswer
 

Hum j'ai du lire en diagonale, mais pourquoi dans ton callable tu ne fais pas :
1) Génération de l'ID
2) Une petite requête pour vérifier si l'ID est pas déjà prise sur ton modèle
3) GOTO 1 si c'est le cas
4) Sinon enjoy.

 

Note que le soucis de ta solution c'est que t'as aucune garantie que ton truc rentre pas dans une boucle potentiellement infinie si par manque de bol il tombe successivement sur un ensemble d'ID déjà prise.

 

Edit : En fait je ne vois pas où est ton soucis dans cette méthode :D


Message édité par SekYo le 28-02-2011 à 14:06:42
n°2060045
nraynaud
lol
Posté le 28-02-2011 à 14:12:55  profilanswer
 

parce que ça me  
1) garantie pas que l'ID sera pas pris au moment de l'insert
2) ça sera re-vérifié au moment de l'insert
 
En fait je vois même pas pourquoi les gens font une requête à l'avance.


---------------
trainoo.com, c'est fini
n°2060046
SekYo
Posté le 28-02-2011 à 14:18:11  profilanswer
 

Ah c'est pas faux, j'avais zapé le cas des multiples insert en même temps.

n°2060047
masklinn
í dag viðrar vel til loftárása
Posté le 28-02-2011 à 14:22:12  profilanswer
 

nraynaud a écrit :


justement j'ai regardé ça, mais il me faut de l'expertise, parce qu'en cas de collision sur une création, le système va faire sa requête, voir que l'ID existe, et transformer l'insert en update.

 

Y'a un paramètre dans save() pour forcer un insert, mais comment je récupère les choses en cas de collision ? j'ai pas trouvé le détail dans la doc.


Me semble qu'une IntegrityError est balancée, mais j'ai pas plus de précisions (et je sais pas dans quel état précis ça laisse ta transaction :/)

nraynaud a écrit :

ça dépend du degré d'isolation des transactions.


Comme d'hab.

nraynaud a écrit :

parce que ça me
1) garantie pas que l'ID sera pas pris au moment de l'insert
2) ça sera re-vérifié au moment de l'insert

 

En fait je vois même pas pourquoi les gens font une requête à l'avance.


Parce que si tu check pas, tu wedge ta transaction, donc faut utiliser des savepoints ou des sous-transactions et faut les rollbacker, je pense (et après faut décider de qui prend la décision de créer et rollbacker le dit savepoint, et faut savoir quelle sémantique tu prends pour une db n'ayant pas de sous-transactions, ou même de transactions tout court). Dans le cas général c'est pas une mauvaise décision (de faire un select for update suivi d'un insert si pas de résultats), mais dans le cas d'un insert sur un id crée manuellement le risque de collisions est non-trivial.


Message édité par masklinn le 28-02-2011 à 14:25:35

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
mood
Publicité
Posté le 28-02-2011 à 14:22:12  profilanswer
 

n°2060667
nraynaud
lol
Posté le 02-03-2011 à 14:58:36  profilanswer
 

db.add_column('map_map', 'deletion_key', self.gf('django.db.models.fields.CharField')(default='21a179a0-f659-483d-af64-c25f20f90b9c', unique=True, max_length=36), keep_default=False)


ça a l'air puissant les migrations auto de south [:implosion du tibia]


---------------
trainoo.com, c'est fini
n°2060678
SekYo
Posté le 02-03-2011 à 15:28:12  profilanswer
 

Ca fait au moins les changements basiques, ce qui est mieux que la solution livrée de base avec django, ie rien ;)
 
Après éditer a la mano la migration c'est pas excessivement complexe non plus.

n°2060679
nraynaud
lol
Posté le 02-03-2011 à 15:32:56  profilanswer
 

nan, mais là il faut en faire 3 en fait.
ajouter la colonne avec un null=True
ajouter un uuid à toutes les lignes existantes
virer le null=True de la colonne.


---------------
trainoo.com, c'est fini
n°2060984
nraynaud
lol
Posté le 03-03-2011 à 16:53:09  profilanswer
 

dites, j'ai un problème méga-stupide, comment on déclare un champ booléen avec true comme valeur par défaut ?

 

j'ai fait

Code :
  1. published = models.BooleanField(default=True, null=False)


mais dans la base derrière, y'a zéro dans la colonne.

Message cité 1 fois
Message édité par nraynaud le 03-03-2011 à 16:53:16

---------------
trainoo.com, c'est fini
n°2061021
masklinn
í dag viðrar vel til loftárása
Posté le 03-03-2011 à 18:37:29  profilanswer
 

nraynaud a écrit :

dites, j'ai un problème méga-stupide, comment on déclare un champ booléen avec true comme valeur par défaut ?
 
j'ai fait

Code :
  1. published = models.BooleanField(default=True, null=False)


mais dans la base derrière, y'a zéro dans la colonne.


Et si tu mets pas null=False? (c'est le défaut normalement)


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2061024
nraynaud
lol
Posté le 03-03-2011 à 19:12:29  profilanswer
 

nan, en fait c'est à cause du ModelForm derrière, il voit pas le champ arriver et il met False.
Je l'ai mis en  editable=False en attendant.
 
Mais la migration m'a mis la string 'True' dans la colonne pour les lignes existantes, j'ai été obligé de changer à la main :/


---------------
trainoo.com, c'est fini
n°2063239
nraynaud
lol
Posté le 14-03-2011 à 13:04:53  profilanswer
 

Traceback:
File "/Library/Python/2.6/site-packages/Django-1.2.4-py2.6.egg/django/core/handlers/base.py" in get_response
  100.                     response = callback(request, *callback_args, **callback_kwargs)
File "map/views.py" in file_detail
  49.     expected_extension = mimetypes.guess_extension(file_type)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/mimetypes.py" in guess_extension
  182.         extensions = self.guess_all_extensions(type, strict)
File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/mimetypes.py" in guess_all_extensions
  161.         type = type.lower()
 
Exception Type: AttributeError  
Exception Value: 'tuple' object has no attribute 'lower'


j'ai juste fait :  

Code :
  1. file_type = mimetypes.guess_type(map.attached_file.name)
  2.     expected_extension = mimetypes.guess_extension(file_type)


et la deuxième ligne fait tout péter.


---------------
trainoo.com, c'est fini
n°2063248
0x90
Posté le 14-03-2011 à 13:22:54  profilanswer
 

Citation :

mimetypes.guess_type(filename[, strict])
Guess the type of a file based on its filename or URL, given by filename. The return value is a tuple (type, encoding) where type is None if the type can’t be guessed (missing or unknown suffix) or a string of the form 'type/subtype', usable for a MIME content-type header

Du coup:

Code :
  1. file_type, encoding = mimetypes.guess_type(map.attached_file.name)


---------------
Me: Django Localization, Yogo Puzzle, Chrome Grapher, C++ Signals, Brainf*ck.
n°2063255
nraynaud
lol
Posté le 14-03-2011 à 13:41:19  profilanswer
 

[:pingouino] j'ai relu la doc pour chercher le type de retour et j'ai pas vu ça [:pingouino]
 
merci.


---------------
trainoo.com, c'est fini
n°2063259
masklinn
í dag viðrar vel til loftárása
Posté le 14-03-2011 à 13:46:38  profilanswer
 

nraynaud a écrit :

[:pingouino] j'ai relu la doc pour chercher le type de retour et j'ai pas vu ça [:pingouino]

 

merci.


 :D

 

Un peu plus visible dans pydoc/help, il est au tout début du 2e paragraphe:

$ pydoc mimetypes.guess_type
Help on function guess_type in mimetypes:

 

mimetypes.guess_type = guess_type(url, strict=True)
    Guess the type of a file based on its URL.
   
    Return value is a tuple (type, encoding) where type is None if the
    type can't be guessed (no or unknown suffix) or a string of the
    form type/subtype, usable for a MIME Content-type header; and
    encoding is None for no encoding or the name of the program used
    to encode (e.g. compress or gzip).  The mappings are table
    driven.  Encoding suffixes are case sensitive; type suffixes are
    first tried case sensitive, then case insensitive.
   
    The suffixes .tgz, .taz and .tz (case sensitive!) are all mapped
    to ".tar.gz".  (This is table-driven too, using the dictionary
    suffix_map).
   
    Optional `strict' argument when false adds a bunch of commonly found, but
    non-standard types.
(END)


Message édité par masklinn le 14-03-2011 à 13:46:59

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2063271
Remigio
Radio Flip, 72.8
Posté le 14-03-2011 à 14:01:42  profilanswer
 

Le message d'erreur était pourtant explicite ...

Citation :

Exception Value: 'tuple' object has no attribute 'lower'


---------------
Everybody can succeed, all you need is to believe
n°2063274
nraynaud
lol
Posté le 14-03-2011 à 14:05:24  profilanswer
 

Remigio a écrit :

Le message d'erreur était pourtant explicite ...

Citation :

Exception Value: 'tuple' object has no attribute 'lower'



j'avais pas compris d'où venait le tuple vu que je m'attendais à une chaine.


---------------
trainoo.com, c'est fini
n°2063850
Shinuza
This is unexecpected
Posté le 15-03-2011 à 20:38:01  profilanswer
 

Drapal


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°2063867
Shinuza
This is unexecpected
Posté le 15-03-2011 à 21:18:24  profilanswer
 

http://blogs.jetbrains.com/pycharm [...] ense-type/

 

Edit :

 

Related, kinda

 

http://blogs.jetbrains.com/pycharm [...] ycon-2011/


Message édité par Shinuza le 15-03-2011 à 22:22:00

---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°2065228
Shinuza
This is unexecpected
Posté le 22-03-2011 à 09:52:45  profilanswer
 

http://www.revsys.com/django/cheatsheet/


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°2065402
masklinn
í dag viðrar vel til loftárása
Posté le 23-03-2011 à 07:45:11  profilanswer
 

Django 1.3 out http://www.djangoproject.com/weblog/2011/mar/23/13/


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2065409
Shinuza
This is unexecpected
Posté le 23-03-2011 à 08:59:17  profilanswer
 

J'arrête pas de me faire griller sur cette news :(
En plus c'est un tag et un bump de version dans la doc et le setup.py :(


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°2065415
Remigio
Radio Flip, 72.8
Posté le 23-03-2011 à 09:32:17  profilanswer
 
n°2065776
Shinuza
This is unexecpected
Posté le 24-03-2011 à 12:29:02  profilanswer
 

Yo,

 

Comment j'attache proprement le request.user au request.POST?

 
Code :
  1. request.POST.appendlist('user', request.user.id)
 

me parait pas térrible...


Message édité par Shinuza le 24-03-2011 à 12:32:38

---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°2065792
Remigio
Radio Flip, 72.8
Posté le 24-03-2011 à 13:31:09  profilanswer
 

C'est surtout étrange de vouloir faire ça  [:delarue5]


---------------
Everybody can succeed, all you need is to believe
n°2065793
masklinn
í dag viðrar vel til loftárása
Posté le 24-03-2011 à 13:39:03  profilanswer
 

Chuis d'accord, un peu d'accord, tu peux expliquer le use case?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2065832
Shinuza
This is unexecpected
Posté le 24-03-2011 à 14:47:45  profilanswer
 

J'ai un modelForm basé sur un profile. J'ai mis le champs user dans Meta.exclude sinon le formulaire affiche logiquement un select avec la liste des utilisateurs.
 
Quand tu soumets le formulaire tu te tapes un “user.id constraint not null is not satisfied“ ou un truc du genre, vu que le field user n'est plus renseigné.
 
J'ai fais ça du coup.
 

Code :
  1. forms.ProfileForm(data=request.POST, files=request.FILES, instance=request.user.get_profile())



---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°2066471
Shinuza
This is unexecpected
Posté le 28-03-2011 à 10:15:58  profilanswer
 

Ptain c'est long le setUp tearDown de la DB à chaque test  [:massys]  
 
On a du PostgresSQL + PostGIS (Environ 2000 objets  [:hardbox] ) , et ce que je teste n'utilise pas la db. Y'a pas moyen de dire au test runner de pas faire le setup de DB, juste pour mes tests?
Ou alors charger une SQLite en mémoire sans loader de fixtures?


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°2066487
gzii
court-circuit
Posté le 28-03-2011 à 10:49:20  profilanswer
 

drap'

n°2066505
masklinn
í dag viðrar vel til loftárása
Posté le 28-03-2011 à 11:41:12  profilanswer
 

Shinuza a écrit :

Ptain c'est long le setUp tearDown de la DB à chaque test  [:massys]  
 
On a du PostgresSQL + PostGIS (Environ 2000 objets  [:hardbox] ) , et ce que je teste n'utilise pas la db. Y'a pas moyen de dire au test runner de pas faire le setup de DB, juste pour mes tests?
Ou alors charger une SQLite en mémoire sans loader de fixtures?


Tu crées un 2e testcase sans les fixtures, pour les trucs qui touchent pas la db?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2066519
Shinuza
This is unexecpected
Posté le 28-03-2011 à 12:44:03  profilanswer
 

masklinn a écrit :


Tu crées un 2e testcase sans les fixtures, pour les trucs qui touchent pas la db?

Elles sont autoloadées, faut que je bypasse la configuration vu que je touche pas à GIS. Je devrais pouvoir tester avec SQLite


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°2066521
masklinn
í dag viðrar vel til loftárása
Posté le 28-03-2011 à 12:56:00  profilanswer
 

Shinuza a écrit :

Elles sont autoloadées, faut que je bypasse la configuration vu que je touche pas à GIS. Je devrais pouvoir tester avec SQLite


Ah c'est juste le loaddata? Ptet les passer en fixtures explicites dans ce cas no?

 

Accessoirement, GeoDjango supporte SpatiaLite en GIS DB. Faut voir quelles sont les limitations, mais le GIS ne devrait pas empêcher des dbs sqlite.


Message édité par masklinn le 28-03-2011 à 12:58:34

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2067772
masklinn
í dag viðrar vel til loftárása
Posté le 03-04-2011 à 18:25:34  profilanswer
 

Pour le dev django, vous faites plutôt du dev niveau projet (un repo avec un projet dedans et une app principale, potentiellement seule, ou même pas d'app du tout et tout directement dans le projet) ou plutôt du dev d'apps avec une sorte de projet générique servant surtout à tester une app ou un set d'app, mais qui ne correspondra pas nécessairement au projet (django) déployé?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2067801
Shinuza
This is unexecpected
Posté le 03-04-2011 à 23:18:15  profilanswer
 

Ce qu'on à sur mon projet c'est un set d'apps dans un seul répo. On à coupé en différentes section :
 
-core qui contient éssentiellement des apps qui définissent des models/tests/fields et admin custom. Orientées données donc.
-util qui contient des apps réutilisables et qui ne font pas nécessairement corps avec le reste du projet. E.g réutilisables avec d'autres projets.
 
Et enfin trois apps qui utilisent tout ça. Ils ont décidé de livrer chaque apps principales avec ses dépendances dans un .deb.
 
J'aurais préféré une app installable et versionnable. Mais c'est pas moi que j'décide.


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°2067822
SekYo
Posté le 04-04-2011 à 10:00:56  profilanswer
 

De notre coté c'est un gros projet, avec pleins d'applications dedans, correspondant aux grandes "fonctions" du site. Maintenant c'est sans doute un cas à part, vu qu'il n'y a qu'un seul (gros) site web, donc pas vraiment de notion de réutilisation des applis pour d'autres sites.

n°2067843
gzii
court-circuit
Posté le 04-04-2011 à 11:22:15  profilanswer
 

masklinn a écrit :

Pour le dev django, vous faites plutôt du dev niveau projet (un repo avec un projet dedans et une app principale, potentiellement seule, ou même pas d'app du tout et tout directement dans le projet) ou plutôt du dev d'apps avec une sorte de projet générique servant surtout à tester une app ou un set d'app, mais qui ne correspondra pas nécessairement au projet (django) déployé?


 
'pouvez répéter la question ?
Faut vraiment que j'apprenne à parler l'informatique  :D  
 
Un repo c'est quoi, un répertoire avec les sources ?
 
Une app principale ?
Edit : Ce sont les coeurs du traitement ou juste le "menu" qui articule le tout ?


Message édité par gzii le 04-04-2011 à 11:25:46
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3  4  5  6  7  8

Aller à :
Ajouter une réponse
 

Sujets relatifs
Blabla@Progue[Topic unique] .Net @ Prog
Page Jsp qui affiche le ${ blabla }case in blabla (KSH) ===> fichier CSV
BlaBla@SQLProblème de configuration MySQL sur Django
Suivant / Précédant dans appli js (non c'est pas history.blabla ...)Blabla@Python \o/
SBP: le Système d'unités de Blabla@Prog 
Plus de sujets relatifs à : blabla@django


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR