Wat is het verschil tussen
request.POST.get('sth')
en
request.POST['sth']
Ik heb de vergelijkbare vraag niet gevonden, beide werken hetzelfde voor mij, stel dat ik ze afzonderlijk kan gebruiken, maar misschien heb ik het mis, daarom vraag ik het. Enig idee?
Antwoord 1, autoriteit 100%
request.POST['sth']
genereert een KeyError
-uitzondering als 'sth'
niet in request.POST
.
request.POST.get('sth')
retourneert None
als 'sth'
niet in request.POST
.
Bovendien kunt u met .get
een extra parameter opgeven van een standaardwaarde die wordt geretourneerd als de sleutel niet in het woordenboek staat. Bijvoorbeeld request.POST.get('sth', 'mydefaultvalue')
Dit is het gedrag van elk python-woordenboek en is niet specifiek voor request.POST
.
Deze twee fragmenten zijn functioneel identiek:
Eerste fragment:
try:
x = request.POST['sth']
except KeyError:
x = None
Tweede fragment:
x = request.POST.get('sth')
Deze twee fragmenten zijn functioneel identiek:
Eerste fragment:
try:
x = request.POST['sth']
except KeyError:
x = -1
Tweede fragment:
x = request.POST.get('sth', -1)
Deze twee fragmenten zijn functioneel identiek:
Eerste fragment:
if 'sth' in request.POST:
x = request.POST['sth']
else:
x = -1
Tweede fragment:
x = request.POST.get('sth', -1)
Antwoord 2
Request.POST-voorbeeld
req.POST['name_your_desired_field']
Hierdoor wordt een KeyError-uitzondering gegenereerd als ‘name_your_desired_field’ niet in req.POST staat.
request.POST.get('name_your_desired_field')
Dit levert Geen op als ‘name_your_desired_field’ niet in req.POST staat.
Hoewel je met .get een extra parameter van een standaardwaarde kunt opgeven die wordt geretourneerd als de sleutel niet in het woordenboek staat. Bijvoorbeeld,
req.POST.get('name_your_desired_field', 'your_default_value')
Dit is het gedrag van elk python-woordenboek en is niet specifiek voor req.POST
Request.GET-voorbeeld
request.GET.get('name_your_desired_field')
Dit levert Geen op als ‘name_your_desired_field’ niet in req.GET staat.
Hoewel u met .get een extra parameter van een standaardwaarde kunt opgeven, die wordt geretourneerd als de sleutel niet in het woordenboek staat. Bijvoorbeeld,
req.GET.get('name_your_desired_field', 'your_default_value')
Dit is het gedrag van elk python-woordenboek en is niet specifiek voor req.GET
Antwoord 3
Het belangrijkste verschil tussen toegang tot normale woordenboeken en toegang met .get() is dat
Met
iets gebruiken als
request.POST['sth']
zal optreden, een sleutelfout is als de ket ‘sth’ niet bestaat.
Maar het gebruik van get() methode-woordenboeken zal u ook een betere foutafhandeling bieden
request.POST.get('sth')
zal niets teruggeven is de sleutel ‘sth bestaat niet’
en ook door de tweede parameter op te geven aan get() zal het als standaardwaarde terugkeren.
data = request.POST.get('sth','my_default_value')
Als de ‘sth’-sleutel niet bestaat, is de waarde in de gegevens my_default_value
.
Dat is het voordeel van het gebruik van de get()-methode boven de normale toegang tot woordenboeken.