2010-07-26 7 views
1

Je travaille sur une application web qui permettra à l'utilisateur de faire une recherche par date, de sorte que, par exemple:Générer élégamment un datetime à partir d'une URL dans Django?

results = Something.objects.filter(end = date) 

Je prévois passer dans les informations de date via l'URL, comme ceci:

example.com/invoicer?2/9/1984 

Je puis saisir la date par request.GET, brisez la première partie et la stocker le mois, supprimer la barre oblique, brisez la deuxième partie que la date, etc., etc.

Je ne m'inquiète pas trop de la vérification des erreurs et des entrées les administrateurs auront accès à cela, mais il semble que ce soit une manière infâme de créer le datetime.

De meilleures idées?

Répondre

5

[...] rompre la première partie et la stocker le mois, supprimer la barre oblique, brisez la deuxième partie que la date, etc., etc.

C'est est en effet pas un moyen idéal pour générer le datetime. Vous êtes mieux avec l'analyse syntaxique de la chaîne:

>>> datetime.datetime.strptime('2/9/1984', '%m/%d/%Y') 
datetime.datetime(1984, 2, 9, 0, 0) 
+0

Gorgeous. Je n'ai pas pu vérifier à gauche, mais exactement ce que j'espérais. –

2

Vous aurez un temps plus facile si vous utilisez un paramètre pour la valeur:

invoicer?date=2/9/1984 

et vous pourriez préférer utiliser une date ISO8601:

invoicer?date=19840209 

Je ne sais pas quelle est votre interface utilisateur ou attendez-vous que les utilisateurs tapent ces URL à la main? Sinon, IS08601 est le chemin à parcourir.

2

Cela semble assez normal. Une autre façon que nous le faisons est de ne pas utiliser la chaîne de requête, mais le chemin:

example.com/invoicer/end_date/1984-02-09 
2

vous pouvez convertir en un unix/epoch date et passer comme un entier long. super simple et ne pas se soucier de l'analyse des chaînes. il suffit d'utiliser time.gmtime de python pour obtenir votre temps à partir du nombre de secondes.

example.com/invoicer?date=1280139973 

time.gmtime(1280139973) 
+0

Nice aussi parce qu'il obscurcit les données envoyées un peu. Je n'aime pas envoyer des données GET évidentes que les utilisateurs peuvent manipuler directement car cela rend la validation des entrées plus difficile. – joel3000

Questions connexes