简体   繁体   English

Django 1.9 form.is_valid()返回false

[英]Django 1.9 form.is_valid() returns false

I'm trying to auth the username and password from django's own USER model. 我正在尝试从django自己的USER模型验证用户名和密码。 The POST Request works, is there any thing wrong with the forms.py? POST请求有效,forms.py有什么问题吗?

views.py views.py

from django.shortcuts import render,get_object_or_404
from django.http import HttpResponse
from .forms import LoginForm
from django.contrib.auth import authenticate, login as auth_login

def login(request):
    msg = "Login"
    if (request.method == "POST"):

        form = LoginForm(request.POST or None)
        msg = "post"
        if form.is_valid():
            msg = "valid"

    context = {
        "msg":msg,
    }

    return render(request, "login.html", context)

forms.py 表格

from django import forms
from django.contrib.auth.models import User

class LoginForm(forms.ModelForm):
    class Meta:
        model = User
        fields = [
            "username",
            "password"
        ]

Login.html Login.html

<div class="container">
        {% if user.is_authenticated %}
            blablabla
        {% else %}
        <div class="row">
            <div class="col-md-6" style="background-color: lightblue">
                <h1 style="color:red">{{ msg }}</h1>
                <form method="POST" action="">{% csrf_token %} 
                    acronym<input type="acronym" name="acronym">
                    password<input type="password" name="password">
                <input type="submit" value="Login">
                </form>
            </div>
        {% endif %}

Edit added the login.html file 编辑添加了login.html文件

The form isn't in your context, neither is it instantiated for a get request. 该表单不在您的上下文中,也不会为获取请求实例化。

To start with try something like so; 首先尝试这样的事情;

def login(request):
    msg = "Login"
    form = LoginForm()

    if (request.method == "POST"):

        form = LoginForm(request.POST or None)
        msg = "post"
        if form.is_valid():
            msg = "valid"

    context = {
        "form": form,
        "msg":msg,
    }

    return render(request, "login.html", context)

That way you can check {{ form.errors }} in your template to see what's wrong. 这样,您可以检查模板中的{{ form.errors }}来查看出了什么问题。

At the moment how do you render the form in login.html ? 目前,您如何在login.html呈现表单? Are you using a loop over fields in the form like this; 您是否使用像这样的形式遍历字段?

<form class="form" action="" method="POST">

    {% if form.non_field_errors or form.errors %}
        <div class="error-list-block">
            <p>
                Please correct the errors below - Ensure all required fields
                are completed.
            </p>
            <ul>
                {% for error in form.non_field_errors|add:form.errors %}
                    <li>{{ error }}</li>
                {% endfor %}
            </ul>
        </div>
    {% endif %}

    {% csrf_token %}
    {% for field in form %}
        {% if field.is_hidden %}
            {{ field }}
        {% else %}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM