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

 


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

blabla@django

n°2090414
SekYo
Posté le 20-07-2011 à 15:36:49  profilanswer
 

Reprise du message précédent :
Perso les deux seules fois ou j'ai eu de gros problèmes de fuites mémoires par évident à trouver, j'utilisais le module hotshot et kcachegrind pour visualiser la sortie.

mood
Publicité
Posté le 20-07-2011 à 15:36:49  profilanswer
 

n°2090434
el muchach​o
Comfortably Numb
Posté le 20-07-2011 à 17:06:25  profilanswer
 

Ouais, là j'utilise un framework maison pour des traitements batch, y'a pas grand chose de prévu pour monitorer la mémoire, et j'ai régulièrement des problèmes. :/
edit:  ah oui, j'avais déjà essayé objgraph, le truc qui m'avait paru le plus rapidement praticable.


Message édité par el muchacho le 20-07-2011 à 22:33:14

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2091507
nraynaud
lol
Posté le 26-07-2011 à 10:01:39  profilanswer
 

dites, comment je mets l'utilisateur courant dans le champ 'user' d'un modèle que je suis en train de créer dans une view ?
 
j'ai tenté :

Code :
  1. form = MapForm(post, files, initial={'user':request.user})
  2.        if form.is_valid():
  3.            form.clean()
  4.            map = form.save()


mais la map n'a pas d'user après le save()
 
j'ai tenté :

Code :
  1. form = MapForm(post, files)
  2.    if request.user.is_authenticated():
  3.        form.user = request.user
  4.    if form.is_valid():
  5.        form.clean()
  6.        map = form.save()


toujours pas d'user dans la map
 
du coup je set le user dans la map directement et je re-sauve, mais bof :/


---------------
trainoo.com, c'est fini
n°2091546
Shinuza
This is unexecpected
Posté le 26-07-2011 à 14:41:21  profilanswer
 

Code :
  1. form = MapForm(post, files, instance=request.user)


Je pense.


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°2091857
nraynaud
lol
Posté le 27-07-2011 à 22:17:09  profilanswer
 

Shinu > je pense pas tu dois passer une instance de Map.
 
dites, comment je peux utiliser la vue logout de là, mais en interdisant de l'appeler par GET (POST obligatoire) ?
https://docs.djangoproject.com/en/d [...] auth.views
 
je trouve pas de décorateur post_only
je saurai pas l'appliquer à une vue par défaut
je trouve pas de syntaxe que je puisse utiliser pour ça dans url.py
 
du coup je vois pas de moyen plus élégant que d'écrire une vue qui va rappeler celle par défaut :/


---------------
trainoo.com, c'est fini
n°2091860
Remigio
Radio Flip, 72.8
Posté le 27-07-2011 à 22:25:34  profilanswer
 

un wrapper dans l'urls.py ?
 
 
edit :
 

Citation :

(r'^accounts/logout/$', 'django.contrib.auth.views.logout_then_login' ),

Message cité 1 fois
Message édité par Remigio le 27-07-2011 à 22:26:39

---------------
Everybody can succeed, all you need is to believe
n°2091862
nraynaud
lol
Posté le 27-07-2011 à 22:30:12  profilanswer
 

Remigio a écrit :

un wrapper dans l'urls.py ?
 
 
edit :
 

Citation :

(r'^accounts/logout/$', 'django.contrib.auth.views.logout_then_login' ),



je comprends pas comment ça va empêcher le GET ça.


---------------
trainoo.com, c'est fini
n°2091864
masklinn
í dag viðrar vel til loftárása
Posté le 27-07-2011 à 23:18:56  profilanswer
 

nraynaud a écrit :

Shinu > je pense pas tu dois passer une instance de Map.

 

dites, comment je peux utiliser la vue logout de là, mais en interdisant de l'appeler par GET (POST obligatoire) ?
https://docs.djangoproject.com/en/d [...] auth.views

 

je trouve pas de décorateur post_only


django.views.decorators.http.require_POST

nraynaud a écrit :

je saurai pas l'appliquer à une vue par défaut


Un décorateur, c'est rien de plus qu'une HoF 1:1. Ça prend une fonction en entrée, ça renvoie une vue en sortie. Il y a juste une syntaxe un peu plus claire (parce que postfixe) pour aller avec def. La seule partie potentiellement tricky c'est quand il prend des paramètres (dans ce cas t'as une fonction qui prend des paramètres et renvoie une fonction qui prend une fonction et renvoie une fonction).

nraynaud a écrit :

je trouve pas de syntaxe que je puisse utiliser pour ça dans url.py


Code :
  1. from django.contrib.auth.views import logout
  2. from django.views.decorators.http import require_POST
  3. # [...]
  4.    (r'^accounts/logout/$', require_POST(logout)),



Message édité par masklinn le 27-07-2011 à 23:19:26

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2091868
nraynaud
lol
Posté le 27-07-2011 à 23:29:55  profilanswer
 

[:bien] merci.


---------------
trainoo.com, c'est fini
n°2091883
Remigio
Radio Flip, 72.8
Posté le 28-07-2011 à 07:07:41  profilanswer
 

nraynaud a écrit :


je comprends pas comment ça va empêcher le GET ça.


Comme précisé juste au dessus, en mettant ton décorateur a cet endroit.


---------------
Everybody can succeed, all you need is to believe
mood
Publicité
Posté le 28-07-2011 à 07:07:41  profilanswer
 

n°2091884
Shinuza
This is unexecpected
Posté le 28-07-2011 à 07:13:26  profilanswer
 

nraynaud a écrit :

Shinu > je pense pas tu dois passer une instance de Map.

T'façon j'aime pas les forms. [:thalis]


---------------
Mains power can kill, and it will hurt the entire time you’re dying from it.
n°2092255
el muchach​o
Comfortably Numb
Posté le 30-07-2011 à 11:33:40  profilanswer
 

Petit post pour ceusse qui utilisent de gros dictionnaires (plusieurs millions d'éléments). D'habitude, c'est pas forcément très recommandé vu ce que ça bouffe en mémoire, vive les générateurs. Mais parfois on en a quand même besoin.

 

J'ai fait quelques tests de kyotocabinet, une "base de données" clef-valeur threadsafe qui peut peut s'appuyer sur des fichiers ou résider en RAM comme cache. Elle peut avoir une structure de hashtable ou d'arbre ordonné en fonction des besoins.

 

Comparaison entre kctree et les dict() de Python:

 
Code :
  1. from kyotocabinet import *
  2. import sys
  3. import os
  4. import re
  5. import time
  6.  
  7. def memoryusage():
  8.    for line in open("/proc/self/status" ):
  9.        line = line.rstrip()
  10.        if line.startswith("VmRSS:" ):
  11.            line = re.sub(r".*:\s*(\d+).*", r"\1", line)
  12.            return float(line) / 1024
  13.    return -1
  14.  
  15. musage = memoryusage()
  16. rnum = 1000000
  17. if len(sys.argv) > 1:
  18.    rnum = int(sys.argv[1])
  19.  
  20. if len(sys.argv) > 2:
  21.    hash = DB()
  22.    if not hash.open(sys.argv[2], DB.OWRITER | DB.OCREATE | DB.OTRUNCATE):
  23.        raise RuntimeError(hash.error())
  24. else:
  25.    print "Using Python dict()"
  26.    hash = {}
  27.  
  28. stime = time.time()
  29. print "Insert %d items" % rnum
  30. for i in xrange(0, rnum):
  31.    key = "%08d" % i
  32.    value = (key, 3.1416, i)
  33.    hash[key] = value
  34.    if i % 1000000 == 0:
  35.        ctime = time.time()
  36.     print "Time: %.3f sec." % (ctime - stime), i
  37.        stime = ctime
  38. etime = time.time()
  39. print "Time: %.3f sec." % (etime - stime)
  40.  
  41. print "Retrieve %d items" % rnum
  42. stime = time.time()
  43. for i in xrange(0, rnum):
  44.    key = "%08d" % i
  45.    value = hash.get(key)
  46.    if value != str((key, 3.1416, i)):
  47.        raise ValueError("Retrieved and inserted values do not match !" )
  48.    if i % 1000000 == 0:
  49.        ctime = time.time()
  50.     print "Time: %.3f sec." % (ctime - stime), i
  51.        stime = ctime
  52. etime = time.time()
  53. print "Time: %.3f sec." % (etime - stime)
  54.  
  55. print "Count: %s" % len(hash)
  56. print "Usage: %.3f MB" % (memoryusage() - musage)
 

Tests sur un Core2Duo 2.14GHz, 2Go de RAM, Linux 2.6.32 32 bits


gromit:~/kyotocabinet-python-legacy-1.16/example$ python memsize.py 10000000 db.kct#tune_buckets=1000000
Insert 10000000 items
Time: 0.000 sec. 0
Time: 8.981 sec. 1000000
Time: 9.479 sec. 2000000
Time: 12.218 sec. 3000000
Time: 12.330 sec. 4000000
Time: 10.349 sec. 5000000
Time: 11.780 sec. 6000000
Time: 12.628 sec. 7000000
Time: 13.289 sec. 8000000
Time: 14.892 sec. 9000000
Time: 15.250 sec.
Retrieve 10000000 items
Time: 15.250 sec. 0
Time: 14.819 sec. 1000000
Time: 8.313 sec. 2000000
Time: 6.672 sec. 3000000
Time: 6.979 sec. 4000000
Time: 6.993 sec. 5000000
Time: 6.966 sec. 6000000
Time: 6.952 sec. 7000000
Time: 6.937 sec. 8000000
Time: 6.898 sec. 9000000
Time: 6.933 sec.
Count: 10000000
Time: 6.933 sec.
Usage: 156.285 MB
gromit:~/kyotocabinet-python-legacy-1.16/example$ python memsize.py 10000000
Using Python dict()
Insert 10000000 items
Time: 0.000 sec. 0
Time: 3.990 sec. 1000000
Time: 7.104 sec. 2000000
Time: 10.422 sec. 3000000
Time: 12.071 sec. 4000000
Time: 16.290 sec. 5000000
Time: 20.123 sec. 6000000
Time: 22.507 sec. 7000000
Time: 23.639 sec. 8000000
Time: 29.017 sec. 9000000
Time: 32.565 sec.
Retrieve 10000000 items
Time: 0.000 sec. 0
Time: 2.332 sec. 1000000
Time: 2.345 sec. 2000000
Time: 2.346 sec. 3000000
Time: 2.361 sec. 4000000
Time: 2.358 sec. 5000000
Time: 2.377 sec. 6000000
Time: 2.409 sec. 7000000
Time: 2.426 sec. 8000000
Time: 2.442 sec. 9000000
Time: 2.461 sec.
Count: 10000000
Usage: 1012.883 MB

 
 

Le fichier db.kct fait 534 Mo.
Sur ma machine, non seulement la RAM utilisée par KC est constante, mais sur un grand nombre d'items il est du même ordre de grandeur niveau rapidité. De plus il a le bon goût d'adopter la syntaxe des dictionnaires Python, ce qui rend le portage quasi immédiat.
Les tests avec la structure hash donnent ça:


nicolas@gromit:~/kyotocabinet-python-legacy-1.16/example$ python memsize.py 2000000 db.kch
Insert 2000000 items
Time: 63.190 sec.
Retrieving 2000000 items
Time: 102.146 sec.
Count: 2000000
Usage: 87.379 MB


C'est bcp plus lent mais la RAM utilisée est encore bcp plus faible.

 

Bref, je trouve cette lib pas mal du tout, ça peut aider dans certains cas par rapport à des techniques de sérialisation sur disque qui seront bcp plus lentes et lourdes à mettre en oeuvre. Il y a aussi un serveur HTTP si besoin, mais évidemment, on n'obtient pas les mêmes performances. Le regret que j'ai est que l'API Python ne semble pas inclure la possibilité de "tuner" la base comme le permet l'API C++. Je me demande bien pourquoi.


Message édité par el muchacho le 01-08-2011 à 11:28:14

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2092261
masklinn
í dag viðrar vel til loftárása
Posté le 30-07-2011 à 12:20:58  profilanswer
 

Faudrait aussi tester avec un sqlite in-memory, un redis et un tokyo cabinet pour faire bonne mesure. Au minimum.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2092300
el muchach​o
Comfortably Numb
Posté le 30-07-2011 à 17:42:39  profilanswer
 

Oui mais le in memory ne m'intéresse pas tellement, en fait. Mon problème au départ, c'est d'éviter de voir la mémoire exploser sur des millions d'enregistrements, et éventuellement de pouvoir reprendre un traitement en cours après interruption involontaire.
J'ai pas fait le test avec sqlite, mais les gus de Google (Jeff Dean et son pote indien) l'on fait, et sauf quand les éléments sont gros il est assez loin derrière. Il est possible aussi qu'il rattrape son retard pour les très gros volumes (disons 10⁸ ou plus), je n'ai pas fait le test. Mais un des intérêts majeurs de ce truc, c'est que tu codes exactement comme si c'était des dict, l'écriture sur disque se fait de façon transparente. Il n'y a oas de notion de relationnel, rien de ce que permet SQLite.
Tokyo cabinet est le prédécesseur de kyoto cab, il est apparemment plus performant, mais moins avancé dans les fonctionnalités, et parait-il plus chiant à builder.
LevelDB est très prometteur, mais pour l'instant, c'est une lib C des plus basiques, il n'y a pas de binding Python particulier.


Message édité par el muchacho le 30-07-2011 à 17:58:33

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2092306
Remigio
Radio Flip, 72.8
Posté le 30-07-2011 à 19:19:05  profilanswer
 

Je me mets tout doucement aux class based views.
 
Mais si vous avez une page avec plusieurs forms de plusieurs models, vous savez comment procéder ? Une FormView ou UpdateView ne gèrent qu'une seule form non ? Faut faire une TemplateView toute simple avec de la gestion de forme dedans ? Mais dans quelle fonction on les gère etc ...


---------------
Everybody can succeed, all you need is to believe
n°2092349
nraynaud
lol
Posté le 31-07-2011 à 02:09:41  profilanswer
 

dites les jeunes, une autre question de n00b aussi : est-ce que je skin les forms de login/logout d'admin et j'envoie mes utilisateurs normaux dessus ou est-ce que je fais les miens ?
 
pour l'instant j'ai fait les miens, mais je me demande.


---------------
trainoo.com, c'est fini
n°2092370
SekYo
Posté le 31-07-2011 à 11:21:16  profilanswer
 

el muchacho a écrit : a écrit :

 
[...]



Attention avant/après le déploiement, si tu finis par l'utiliser en prod, ils sont mis çà en place dans ma boite précédente et il semble y avoir quelques problèmes de stabilité... Pas plus d'infos là dessus par contre.
 
@nraynaud : J'hésite toujours aussi. Au final je me retrouve souvent à faire les miens.

n°2092420
Remigio
Radio Flip, 72.8
Posté le 31-07-2011 à 17:05:07  profilanswer
 

nraynaud a écrit :

dites les jeunes, une autre question de n00b aussi : est-ce que je skin les forms de login/logout d'admin et j'envoie mes utilisateurs normaux dessus ou est-ce que je fais les miens ?
 
pour l'instant j'ai fait les miens, mais je me demande.

J'ai toujours fait les miens aussi.


---------------
Everybody can succeed, all you need is to believe
n°2092422
nraynaud
lol
Posté le 31-07-2011 à 17:23:54  profilanswer
 

ok, merci, je reste comme ça alors


---------------
trainoo.com, c'est fini
n°2092509
el muchach​o
Comfortably Numb
Posté le 01-08-2011 à 10:40:47  profilanswer
 

SekYo a écrit :


Attention avant/après le déploiement, si tu finis par l'utiliser en prod, ils sont mis çà en place dans ma boite précédente et il semble y avoir quelques problèmes de stabilité... Pas plus d'infos là dessus par contre.
 
@nraynaud : J'hésite toujours aussi. Au final je me retrouve souvent à faire les miens.


Ah, ce serait possible d'avoir plus de précisions ? Merci.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
n°2092539
SekYo
Posté le 01-08-2011 à 11:37:59  profilanswer
 

el muchacho a écrit :


Ah, ce serait possible d'avoir plus de précisions ? Merci.


J'essaierai d'avoir plus d'infos à l'occaz d'un pot avec mes anciens collègues, mais là non, j'ai pas plus d'infos.

n°2092585
nraynaud
lol
Posté le 01-08-2011 à 13:30:22  profilanswer
 

dites, y'a moyen d'avoir des champs optionnels dans un ModelForm ? je veux que lors du submit on accepte le form que mon champ soit là ou non (y'a une valeur par défaut).
 
quand j'utilise exclude, mon champ est pas pris en compte, et quand je laisse le champ dans le form, il refuse les submits où il apparaît pas.


---------------
trainoo.com, c'est fini
n°2092589
masklinn
í dag viðrar vel til loftárása
Posté le 01-08-2011 à 13:36:52  profilanswer
 

nraynaud a écrit :

dites, y'a moyen d'avoir des champs optionnels dans un ModelForm ? je veux que lors du submit on accepte le form que mon champ soit là ou non (y'a une valeur par défaut).


Faut overrider le champ dans le ModelForm et passer `require=False` (à la base ça tape dans le blank du model field, modelform.field.required = not model.field.blank)

 

Par contre dans ce cas t'es obligé de porter tous les attributs du Model au ModelForm (genre help_text ou max_length).


Message édité par masklinn le 01-08-2011 à 13:37:56

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2092590
nraynaud
lol
Posté le 01-08-2011 à 13:45:13  profilanswer
 

ok, mon champ est actuellement null=True, c'est donc pas converti automatiquement en require=False ? (sinon je serai pas là à demander j'imagine)
 
je pense que dans mon cas c'est pas con de répéter tous les champs dans le form, parce qu'il y en a certains que je pourrai oublier et spiller côté user.


---------------
trainoo.com, c'est fini
n°2092591
masklinn
í dag viðrar vel til loftárása
Posté le 01-08-2011 à 13:52:17  profilanswer
 

nraynaud a écrit :

ok, mon champ est actuellement null=True, c'est donc pas converti automatiquement en require=False ? (sinon je serai pas là à demander j'imagine)


Non, faut mettre blank=True, qui lui sera converti en required=False

Message cité 1 fois
Message édité par masklinn le 01-08-2011 à 13:52:54

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2092594
nraynaud
lol
Posté le 01-08-2011 à 13:56:48  profilanswer
 

Bordel, ça devait etre ça mon pb.


---------------
trainoo.com, c'est fini
n°2092695
nraynaud
lol
Posté le 01-08-2011 à 16:58:52  profilanswer
 

dites, si j'ai une machine (virtuelle) neuve à poil dans la main droite et le git avec mon projet django dans la gauche, c'est quoi la méthode la plus rapide pour que le projet soit servi par la machine ?

Message cité 1 fois
Message édité par nraynaud le 01-08-2011 à 16:59:21

---------------
trainoo.com, c'est fini
n°2092820
nraynaud
lol
Posté le 02-08-2011 à 09:43:31  profilanswer
 

nraynaud a écrit :

dites, si j'ai une machine (virtuelle) neuve à poil dans la main droite et le git avec mon projet django dans la gauche, c'est quoi la méthode la plus rapide pour que le projet soit servi par la machine ?


UP :fou:  
 
là puppet ça me casse les couilles :fou:


---------------
trainoo.com, c'est fini
n°2093514
nraynaud
lol
Posté le 05-08-2011 à 16:21:37  profilanswer
 

dites, j'ai des cookies que je manipule à la fois côté JS et côté serveur, et je me retrouve parfois avec le cookie en double (2 fois le même nom avec des valeur différente dans les Requests).
 
est-ce que HttpResponse.set_cookie() ajoute le cookie ou le remplace s'il existe ?


---------------
trainoo.com, c'est fini
n°2093516
masklinn
í dag viðrar vel til loftárása
Posté le 05-08-2011 à 16:27:46  profilanswer
 

nraynaud a écrit :

dites, j'ai des cookies que je manipule à la fois côté JS et côté serveur, et je me retrouve parfois avec le cookie en double (2 fois le même nom avec des valeur différente dans les Requests).
 
est-ce que HttpResponse.set_cookie() ajoute le cookie ou le remplace s'il existe ?


Il n'y a pas de différence entre ces opérations, à ma connaissance t'as un seul header de réponse Set-Cookie qui est utilisé pour C, U et D.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2093518
nraynaud
lol
Posté le 05-08-2011 à 16:29:22  profilanswer
 

'tain je sais pas ce que je fous, mais il doublonne ce con.


---------------
trainoo.com, c'est fini
n°2093522
masklinn
í dag viðrar vel til loftárása
Posté le 05-08-2011 à 16:33:43  profilanswer
 

nraynaud a écrit :

'tain je sais pas ce que je fous, mais il doublonne ce con.


truc à la con genre encoding ou je sais pas quoi?


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2093545
nraynaud
lol
Posté le 05-08-2011 à 17:05:56  profilanswer
 

masklinn a écrit :


truc à la con genre encoding ou je sais pas quoi?


c'était le path, il faut mettre / à tout le monde, le plugin jQuery le faisait pas.


---------------
trainoo.com, c'est fini
n°2093548
masklinn
í dag viðrar vel til loftárása
Posté le 05-08-2011 à 17:10:01  profilanswer
 

nraynaud a écrit :


c'était le path, il faut mettre / à tout le monde, le plugin jQuery le faisait pas.


Ah oui effectivement [:romf]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2094477
artscoop
la fin des temps
Posté le 10-08-2011 à 15:21:26  profilanswer
 

nraynaud a écrit :

dites les jeunes, une autre question de n00b aussi : est-ce que je skin les forms de login/logout d'admin et j'envoie mes utilisateurs normaux dessus ou est-ce que je fais les miens ?
 
pour l'instant j'ai fait les miens, mais je me demande.


toujours fait les miens personnellement, notamment à cause du chemin des templates qui correspond pas à mes « conventions » et dont je peux me passer.
(salut à tous)


---------------
Site de rencontre
n°2094480
nraynaud
lol
Posté le 10-08-2011 à 15:24:50  profilanswer
 

ok, merci.  
Avant de poser la question j'avais fait les miens (parce que j'avais pas encore lu la doc sur l'admin) et 2 autres personnes font les leurs je pense le cas est résolu.


---------------
trainoo.com, c'est fini
n°2095494
nraynaud
lol
Posté le 16-08-2011 à 17:16:45  profilanswer
 

dites, dans mon model j'ai des champs de texte généralement court (titre de pages, nom des gens etc.), mais dont j'ai absolument pas envie de limiter la longueur de manière arbitraire (entre autre parce que j'ai pas de critère pour le faire) y'a autre chose que CharField ou TextField ?
 
J'en ai marre de ces champs limités en longueur, on se croirait dans les années 80 avec des flat files :/


---------------
trainoo.com, c'est fini
n°2095497
masklinn
í dag viðrar vel til loftárása
Posté le 16-08-2011 à 17:31:40  profilanswer
 

nraynaud a écrit :

dites, dans mon model j'ai des champs de texte généralement court (titre de pages, nom des gens etc.), mais dont j'ai absolument pas envie de limiter la longueur de manière arbitraire (entre autre parce que j'ai pas de critère pour le faire) y'a autre chose que CharField ou TextField ?

 

J'en ai marre de ces champs limités en longueur, on se croirait dans les années 80 avec des flat files :/


Bah en même temps, django reste limité par ce qui est en dessous, tu peux toujours coller des tailles vachement hautes mais derrière tu risques de te taper les limites d'implé des dbs (VARCHAR sous Oracle c'est 4000 caractères max).

 

Mais pourquoi tu utilises pas un textfield justement? Il n'y a pas de limites dessus, c'est fait pour ça non? (je présume que TextField mappe sur le type text, sinon je vois pas d'intérêt).

 

D'ailleurs sous Postgres, VARCHAR et TEXT ont les mêmes perfs, donc tu peux mettre du TEXT partout si ça te chante (et tu changes le widget pour avoir des charfields en admin au lieu de textarea partout)

 

edit: et dans SQLite, VARCHAR devient TEXT, il n'y a pas de type VARCHAR ou CHAR.

Message cité 1 fois
Message édité par masklinn le 16-08-2011 à 17:36:08

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°2095498
SekYo
Posté le 16-08-2011 à 17:32:06  profilanswer
 

Le truc c'est qu'à ma connaissance le coupable c'est pas django, mais les DBMS qui sont derrières. La plupart, comme PostgreSQL ou MySQL demandent une taille fixe pour le type char de base.

 

Par contre, une note intéressante sur PostGreSQL par exemple c'est qu'il n'y a pas de différence de performance entre les différents types. http://www.postgresql.org/docs/8.2 [...] acter.html  ( voir le "tip" ), du coup autant utiliser un TextField par exemple.

 


Edit : FFS burned by Mask !

Message cité 1 fois
Message édité par SekYo le 16-08-2011 à 17:32:53
n°2095500
nraynaud
lol
Posté le 16-08-2011 à 17:35:56  profilanswer
 

masklinn a écrit :


Bah en même temps, django reste limité par ce qui est en dessous, tu peux toujours coller des tailles vachement hautes mais derrière tu risques de te taper les limites d'implé des dbs (VARCHAR sous Oracle c'est 4000 caractères max).
 
Mais pourquoi tu utilises pas un textfield justement? Il n'y a pas de limites dessus, c'est fait pour ça non? (je présume que TextField mappe sur le type text, sinon je vois pas d'intérêt).
 
D'ailleurs sous Postgres, VARCHAR et TEXT ont les mêmes perfs, donc tu peux mettre du TEXT partout si tu veux (et tu changes le widget pour avoir des charfields en admin au lieu de textboxes partout)
 
edit: et dans SQLite, VARCHAR devient TEXT, il n'y a pas de type VARCHAR ou CHAR.


j'achète l'analyse.
 
J'ai juste besoin de renforcement social [:ciler]


---------------
trainoo.com, c'est fini
n°2095501
masklinn
í dag viðrar vel til loftárása
Posté le 16-08-2011 à 17:37:32  profilanswer
 

nraynaud a écrit :

j'achète l'analyse.

 

J'ai juste besoin de renforcement social [:ciler]


Tu peux même aliaser TextField(widget=whatever_the_char_widget_is) en CharField, comme ça tu utilises juste TextField ou CharField selon ce que tu veux en widget par défaut/dans ton admin, et dans tous les cas c'est stocké en text sans limite de taille.

 

J'ai toujours pensé que char/varchar pouvait être plus efficace pq tu stockes des records en fixed-length alors qu'avec text t'as (potentiellement) une indirection, mais si c'est pas le cas (pour postgres et sqlite, les autres je m'en bat) en fait c'est se faire chier pour rien, text FTW.

Message cité 1 fois
Message édité par masklinn le 16-08-2011 à 17:38:55

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
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