Je définis actuellement des expressions régulières afin de capturer des paramètres dans une URL, comme décrit dans le tutoriel. Comment accéder aux paramètres depuis l'URL en tant que partie de l' HttpRequest
objet? Mon HttpRequest.GET
retourne actuellement un QueryDict
objet vide .
J'aimerais apprendre à faire cela sans bibliothèque pour mieux connaître Django.
self.kwargs['parameter']
Pour clarifier l'explication de camflan, supposons que vous ayez
url(regex=r'^user/(?P<username>\w{1,50})/$', view='views.profile_page')
http://domain/user/thaiyoshi/?message=Hi
La règle de répartiteur d'URL interceptera des parties du chemin URL (ici
"user/thaiyoshi/"
) et les transmettra à la fonction d'affichage avec l'objet de demande.La chaîne de requête (ici
message=Hi
) est analysée et les paramètres sont stockés sous la forme d'unQueryDict
inrequest.GET
. Aucune autre correspondance ou traitement des paramètres HTTP GET n'est effectué.Cette fonction d'affichage utiliserait les deux parties extraites du chemin URL et un paramètre de requête:
En remarque, vous trouverez la méthode de demande (dans ce cas
"GET"
, et pour les formulaires soumis généralement"POST"
) dansrequest.method
. Dans certains cas, il est utile de vérifier qu'il correspond à ce que vous attendez.Mise à jour: lorsque vous décidez d'utiliser le chemin URL ou les paramètres de requête pour transmettre des informations, les éléments suivants peuvent être utiles:
/blog/post/15/
(pas/blog/posts/?id=15
)/blog/post/15/?show_comments=1
ou/blog/posts/2008/?sort_by=date&direction=desc
/blog/post/2008/09/30/django-urls/
la source
Utiliser GET
Utilisation de POST
la source
KeyError
exceptions dans le cas d'une clé manquante. Il serait sage de faire de même (par exemplerequest.POST.get('id', '')
).la source
Pour les situations où vous n'avez que l'
request
objet que vous pouvez utiliserrequest.parser_context['kwargs']['your_param']
la source
Je voudrais ajouter une option de moi-même, ici. Quelqu'un se demanderait comment définir le chemin dans urls.py, tel que
afin que nous puissions invoquer la requête.
Le fait est qu'il n'est PAS nécessaire de définir une telle route dans urls.py. Ce que vous devez définir est simplement l'itinéraire dans urls.py
et quand vous entrez http: // nomserveur: port / domaine / Recherche / q = CA . La partie de requête '? Q = CA' sera automatiquement réservée dans la table de hachage que vous pouvez référencer
Voici un exemple (views.py)
En outre, lorsque vous écrivez une chaîne de requête en URL
N'encapsulez pas la chaîne de requête entre guillemets, par exemple
la source
Je voudrais partager un conseil qui pourrait vous faire gagner du temps.
Si vous prévoyez d'utiliser quelque chose comme ça dans votre
urls.py
fichier:Ce qui signifie essentiellement
www.example.com/<username>
. Assurez-vous de le placer à la fin de vos entrées URL, car sinon, il est susceptible de provoquer des conflits avec les entrées URL qui suivent ci-dessous, c'est-à-dire que l'accès à l'une d'entre elles vous donnera la bonne erreur:User matching query does not exist.
je viens de la vivre moi-même; J'espère que cela aide!
la source
Vous avez deux façons courantes de le faire au cas où votre URL ressemble à ça:
v1:
Si une clé spécifique est obligatoire, vous pouvez utiliser:
Cela renverra une valeur de
a
si la clé existe et une exception dans le cas contraire.v2:
Si vos clés sont facultatives:
Vous pouvez essayer cela sans argument, cela ne plantera pas. Vous pouvez donc envelopper avec
try: except:
et revenirHttpResponseBadRequest()
en exemple. C'est un moyen simple de rendre votre code moins complexe, sans utiliser de gestion d'exceptions spéciale.la source
Ce n'est pas exactement ce que vous avez demandé, mais cet extrait est utile pour la gestion
query_strings
danstemplates
.la source
Ces requêtes sont actuellement effectuées de deux manières. Si vous souhaitez accéder aux paramètres de requête (GET), vous pouvez interroger les éléments suivants:
Si vous souhaitez accéder aux paramètres passés par POST, vous devez accéder de cette façon:
En accédant au dictionnaire (QueryDict) avec 'get ()', vous pouvez définir une valeur par défaut. Dans les cas ci-dessus, si 'status' ou 'role' ne sont pas informés, les valeurs sont None.
la source
Ceci est une autre solution alternative qui peut être mise en œuvre:
dans la configuration url. :
dans les vues:
la source