es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema radica en el hecho de que la variable get no está llamando realmente al método get en el diccionario request.POST, sino que está devolviendo el método en sí mismo. Por lo tanto, al intentar obtener el valor usando request.POST.get('your_name'), está devolviendo None.

    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.

Comments are closed.