Python DJANGO登录//输入字段不工作//错误消息不显示

Python DJANGO登录//输入字段不工作//错误消息不显示,python,django,login,django-forms,cloud9,Python,Django,Login,Django Forms,Cloud9,******听我说完,我知道这有点长,我不喜欢这样的声音,但我已经4天没睡了,这是我学校项目的一部分,因此我非常感谢大家对这方面的任何意见****** 您好,我对Django还比较陌生,但尽管如此,我在youtube上的教程和Django文档中不断更新,试图弥补这一点。我已经创建了polls应用程序,还创建了其他几个应用程序,但这两次当我几乎完成时,它们完全变成了白色,我不得不从头开始。在这一点上,我只是对Django感到厌倦,但我愿意继续,因为我真的很讨厌辞职 无论如何,这不是这个问题的核心(

******听我说完,我知道这有点长,我不喜欢这样的声音,但我已经4天没睡了,这是我学校项目的一部分,因此我非常感谢大家对这方面的任何意见******

您好,我对Django还比较陌生,但尽管如此,我在youtube上的教程和Django文档中不断更新,试图弥补这一点。我已经创建了polls应用程序,还创建了其他几个应用程序,但这两次当我几乎完成时,它们完全变成了白色,我不得不从头开始。在这一点上,我只是对Django感到厌倦,但我愿意继续,因为我真的很讨厌辞职

无论如何,这不是这个问题的核心(尽管如果你能帮助我的应用程序重新启动并运行,那就太好了!我会在下面放一个链接)

在尝试学习如何登录页面后,我最近的应用程序崩溃。我启动了另一个名为accounts的应用程序,它将专门用于登录/注销/注册。然而,到目前为止,事情进展得并不顺利

我开始在youtube上学习一个教程,但后来出现了一大堆我无法摆脱的错误,我不得不处理缩进之类的东西。因此,我用另一个教程重新开始了我的应用程序,这就是这里的教程:

我试着在这段视频中忽略我的错误(这是因为我的输入字段没有显示),并尝试转到下一个错误,这是登录页面背后的逻辑。但是我知道我还有一个错误。现在,错误消息不起作用,每当我单击submit时,都不会发生任何事情。页面基本上会刷新。我知道我还没有深入到注册部分,这将允许我实际登录,但我期待某种错误消息告诉我,我没有帐户或其他什么

对于我的输入字段,我尝试了几种方法(包括这个),但都没有效果。唯一一件远程接近的事情是,我用Html手动输入字段(我知道我不应该这样做),或者将form.Html链接到一个表单模板,该模板只检查用户是否在字段中输入了内容(这也不起作用)

这是我的代码,如果你还在读这篇文章,非常感谢你到目前为止对我的支持。(还要注意,注释掉的部分是我以前尝试过的)

views.py

    from django.contrib.auth import (
    authenticate,
    get_user_model,
    login,
    logout,

    )
from django.shortcuts import render
from django.http import HttpResponse,HttpResponseRedirect
from .forms import UserLoginForm

# Create your views here.
def login_view(request):
    title = "Login"
    form = UserLoginForm(request.POST or None)
    if form.is_valid():
        username = form.cleaned_data.get("username")
        password = form.cleaned_data.get('password')

    return render(request, "accounts/form.html", {"form":form, "title": title})


# def authentication(request):
#     if request.method == 'POST':
#         title = "Login"
#         form = UserLoginForm(request.POST)
#         if form.is_valid():
#             cd = form.cleaned_data
#             user = authenticate(username=cd['username'],
#                         password=cd['password'])
#             if user is not None:
#                 if user.is_active:
#                     login(request, user)
#                     #return HttpResponse('Authenticated ' \
#                      #       'successfully')
#                     return HttpResponseRedirect('accounts/home.html/')
#             else:
#                 return HttpResponse('Disabled account')

#         else:
#             return HttpResponse('Invalid login')
#     else:
#         form = UserLoginForm()

#     return render(request, 'accounts/form.html', {'form': form})



def register_view(request):
    return render(request,"accounts/form.html",{})

def logout_view(request):
    return render(request,"accounts/form.html",{})
forms.py

from django import forms
from django.contrib.auth import (
    authenticate,
    get_user_model,
    login,
    logout,

    )

User = get_user_model()

class UserLoginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput) 

    class Meta: 
        model = User 
        fields = ('username', 'email', 'password')

    def clean(self,*args,**kwargs):
        username = self.cleaned_data.get("username")
        password = self.cleaned_data.get("password")
        user = authenticate(username=username,password=password)
        if not user:
            raise forms.ValidationError("This user does not exist")
        if not user.check_password(password):
            raise forms.ValidationError("Incorrect Password")
        if not user.is_active:
            raise forms.ValidationError("This user is no longer active.")
        return super(UserLoginForm, self).clean(*args,**kwargs)
form.html

{% extends 'accounts/base.html' %}


{% block main_content %}

    <div class="container">
        <h2 class="form-signin-heading">{{ title }}</h2>
        <form method='POST' action='' enctype='multipart/form-data' class="form-signin">
                {% csrf_token %}
                <!--{% include 'accounts/form-template.html' %}-->
                <h2 class="h3 mb-3 font-weight-normal">Please sign in</h2>

                <label for="username" class="sr-only">Username</label>
                <input type="username" id="username" class="form-control" placeholder="Username" required autofocus>
                <label for="inputPassword" class="sr-only">Password</label>
                <input type="password" id="inputPassword" class="form-control" placeholder="Password" required>
                <button class="btn btn-lg btn-primary btn-block" type="submit" value="{{ title }}">Sign In</button>
            </form>

    </div>


    <!--<div class='col-sm-6 col-sm-offset-3'>-->
    <!--    <h1>{{ title }}</h1>-->
    <!--    <form method='POST' action='' enctype='multipart/form-data'>{% csrf_token %}-->
    <!--        <input type='submit' class='btn btn-default' value='{{ title }}' />-->
    <!--    </form>-->
    <!--</div>-->

{% endblock %}
{% extends 'accounts/base.html' %}
{% block main_content %}
    <div class="container">
        <div class='col-sm-6 col-sm-offset-3'>
        <h1>{{ title }}</h1>
        <form method='POST' action='' enctype='multipart/form-data'>{% csrf_token %}
            {{ form.as_p }}
            <input type='submit' class='btn btn-default' value='{{ title }}' />
        </form>
    </div>
    </div>
{% endblock %}
url.py(适用于我的网站而非应用程序)

我的网站图片:

如图所示,一切都刚刚结束,我不想再重新启动,因为时间不够,我会不及格的

更新的基数

{% load staticfiles %}

<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title>Accounts</title>

    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
    <link rel="stylesheet" type="text/css" href="{% static 'accounts/signin.css' %}" />
</head>

<body>


    <div class="jumbotron">
        <div class="container">

            {% block main_content %} 
            {% endblock %} 
        </div>
    </div>

</body>

</html>
{%load staticfiles%}
账户
{%block main_content%}
{%endblock%}

问题在于,即使表单已提交,您也在呈现模板。试试这个:

 def login_view(request):
        title = "Login"
        form = UserLoginForm(request.POST or None)
        if form.is_valid():
            username = form.cleaned_data.get("username")
            password = form.cleaned_data.get('password')
            user = authenticate(request, username=username, password=password)      
            if user is not None:
              login(request, user)
              # Redirect to a success page.


        return render(request, "accounts/form.html", {"form":form, "title": title})
将form.html输入更改为:

<input name="username" type="username" id="username" class="form-control" placeholder="Username" required autofocus>
<input name="password" type="password" id="inputPassword" class="form-control" placeholder="Password" required>

下面是一个有用的

下面是我如何获得默认登录表单的显示方式(添加
{{form.as\p}

form.html

{% extends 'accounts/base.html' %}


{% block main_content %}

    <div class="container">
        <h2 class="form-signin-heading">{{ title }}</h2>
        <form method='POST' action='' enctype='multipart/form-data' class="form-signin">
                {% csrf_token %}
                <!--{% include 'accounts/form-template.html' %}-->
                <h2 class="h3 mb-3 font-weight-normal">Please sign in</h2>

                <label for="username" class="sr-only">Username</label>
                <input type="username" id="username" class="form-control" placeholder="Username" required autofocus>
                <label for="inputPassword" class="sr-only">Password</label>
                <input type="password" id="inputPassword" class="form-control" placeholder="Password" required>
                <button class="btn btn-lg btn-primary btn-block" type="submit" value="{{ title }}">Sign In</button>
            </form>

    </div>


    <!--<div class='col-sm-6 col-sm-offset-3'>-->
    <!--    <h1>{{ title }}</h1>-->
    <!--    <form method='POST' action='' enctype='multipart/form-data'>{% csrf_token %}-->
    <!--        <input type='submit' class='btn btn-default' value='{{ title }}' />-->
    <!--    </form>-->
    <!--</div>-->

{% endblock %}
{% extends 'accounts/base.html' %}
{% block main_content %}
    <div class="container">
        <div class='col-sm-6 col-sm-offset-3'>
        <h1>{{ title }}</h1>
        <form method='POST' action='' enctype='multipart/form-data'>{% csrf_token %}
            {{ form.as_p }}
            <input type='submit' class='btn btn-default' value='{{ title }}' />
        </form>
    </div>
    </div>
{% endblock %}

内置登录视图是否不足以满足您的需要?如果您指的是标签上字段的重叠,那就是css问题。你的标签有一个固定的宽度,这对他们来说是不够的。根据你显示的代码,页面只会刷新。你的表单的clean方法调用authenticate,不做任何其他操作。谢谢你的反馈Ramkishore,但是我怎么知道Django表单是否适合我?谢谢Benjamin,但我已经尝试了从刷新到重新启动服务器的所有方法好几次,但似乎都不起作用我感谢你的反馈Dasith,但是我试过了,我得到了一个答案,你在赋值之前使用了变量“user”,因为你在第一个if语句中赋值了它。错误显示:在之前引用的/login/local变量“user”处取消绑定LocalErrorassignment@X-TremeFighter12,在
表单上方插入
user=None
。是否有效()
block,然后您就可以安全地测试它是否为
None
。但这告诉你的是你的表单没有被验证。可能是因为无论这是初始请求(使用GET)还是表单提交检查(使用POST),该位都会运行。@X-TremeFighter12我对代码进行了更改。这应该行得通。一定要把你的逻辑放在上面写着“重定向”的地方本杰明,达斯特,我真的很感谢你们的帮助,但是我仍然很难显示输入字段,因为我手动输入的输入字段没有链接到我数据库中的任何东西。它们基本上只是为了展示,如果你的建议有效与否,它们在测试中是不准确的。我只是依靠错误来告诉我是否出了问题。我不知道如何显示它们或链接它们,如果我把它们手动放在我的Html中。很抱歉打扰了,但你们知道我有什么方法可以直接在我的Html表单上显示数据库中的字段吗?或者我可以从我的Html链接它们吗?任何链接都会有帮助,我将衷心感谢。它成功了!!!!!非常感谢,希瓦姆!我真的很感激。我不想听起来太需要什么,但当我接受了你关于基本模板中的引导和jquery的建议时,它并没有真正起作用。是的,我可以看到jumbotron模板的一些实例,但我正在尝试使其看起来像在我问题的底部,我现在更新了我的页面和基本模板。更新了答案,请使用
表单。模板中的as\u p
<input name="username" type="username" id="username" class="form-control" placeholder="Username" required autofocus>
<input name="password" type="password" id="inputPassword" class="form-control" placeholder="Password" required>
fields = ("username", "password")
{% extends 'accounts/base.html' %}
{% block main_content %}
    <div class="container">
        <div class='col-sm-6 col-sm-offset-3'>
        <h1>{{ title }}</h1>
        <form method='POST' action='' enctype='multipart/form-data'>{% csrf_token %}
            {{ form.as_p }}
            <input type='submit' class='btn btn-default' value='{{ title }}' />
        </form>
    </div>
    </div>
{% endblock %}
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" ></script>
def login_view(request):
    title = "Login"
    form = UserLoginForm(request.POST or None)
    if form.is_valid():
        username = form.cleaned_data.get("username")
        password = form.cleaned_data.get('password')
        user = authenticate(request, username=username, password=password)      
        if user is not None:
          login(request, user)
          # or any other success page
          return HttpResponse("Logged in")
    return render(request, "accounts/form.html", {"form":form, "title": title})