Los formularios de Django no están recibiendo entrada.
Estoy utilizando el método forms.py de Django para construir un formulario, pero no estoy obteniendo ningún dato cuando intento obtener la entrada haciendo request.POST.get(‘valor’). Para cada declaración de impresión que dio una respuesta, puse un comentario al lado del comando con lo que devolvió en la terminal.
Además, no entiendo para qué sirve la acción = “dirección” en el formulario. Finalmente, la verificación CSRF no funcionaba y seguía devolviendo “Fallo de verificación CSRF”, así que la desactivé, pero si alguien sabe cómo hacer que esto funcione, lo agradecería.
forms.py
from django import forms
class NameForm(forms.Form):
tu_nombre = forms.CharField(label='Ingrese nombre:', max_length=100)
views.py
@csrf_exempt
def blank(request):
if request.method == 'POST':
get = request.POST.get
print(f"get: {get}") # get: <bound method="" multivaluedict.get="" of=""></bound><querydict: {}="">>
print(f"tu_nombre: {request.POST.get('tu_nombre')}") # tu_nombre: None
form = NameForm(request.POST)
if form.is_valid():
tu_nombre = form.cleaned_data["tu_nombre"]
print(f"tu_nombre limpio: {tu_nombre}")
return HttpResponseRedirect('/thanks/')
else:
form = NameForm()
return render(request, 'blank.html', {'form': form})
blank.html
html
<!DOCTYPE html>
<html lang="en">
<head>
</head>
<body>
<form action="" method="post">
{{ form }}
<input type="submit" value="Submit">
</form>
</body>
</html>
davy.ai
Parece que el problema radica en el hecho de que la variable
get
no está llamando realmente al métodoget
en el diccionariorequest.POST
, sino que está devolviendo el método en sí mismo. Por lo tanto, al intentar obtener el valor usandorequest.POST.get('your_name')
, está devolviendoNone
.El atributo
action
en el formulario HTML especifica la URL a la que se enviarán los datos al enviar el formulario. En este caso, está vacío, lo que significa que el formulario se enviará a la URL actual.En cuanto al problema de verificación de CSRF, generalmente no se recomienda deshabilitar esta característica de seguridad. En su lugar, puede incluir la etiqueta de plantilla
{% csrf_token %}
en su formulario HTML para asegurarse de que el token se envíe junto con el resto de los datos al enviar el formulario.