Django登录表单输入字段未显示

时间:2018-03-08 04:01:14

标签: python django django-forms

为一个类开发Django Web项目。

为登录页面创建了一个自己的模板,如下所示

{% extends 'thirdauth/base.html' %}
{% block content %}
<h2>Login</h2>
<div class="login-form">
  <form method="post" action="{% url 'thirdauth:login' %}">
      {{form.as_p}}
      {% csrf_token %}
      <input type="hidden" name="next" value="{{ next }}" />
      <p><input type="submit" value="Login"></p>
  </form>
</div>
<br>
<p><strong>-- OR --</strong></p>
<a href="{% url 'thirdauth:social:begin' 'github' %}">Login with GitHub</a><br>
{% endblock %}

我面临的唯一问题是,当网站最初加载时,用户和密码+标签的输入字段不会显示。当我点击“登录”按钮时,会显示这些字段,我可以输入所有内容,并且工作正常......

这是urls.py

from django.conf.urls import url, include
from django.contrib import admin
from django.contrib.auth import views as auth_views
from . import views

urlpatterns = [
            url(r'^login/$', auth_views.login, name='login'),
            url(r'^logout/$', auth_views.logout, name='logout'),
            url(r'^auth/', include('social_django.urls', namespace='social')),
            url(r'^admin/', admin.site.urls),
            url(r'^accounts/login/$', views.authentication, name='authentication'),
]

我很感谢你的帮助,我认为这只是我的一个小愚蠢的错误,但是我无法找到它,互联网上的大多数帮助都集中在自定义的形式上。

修改 views.py:

from django.shortcuts import render_to_response
from django.template.context import RequestContext
from django.shortcuts import render, get_object_or_404

def authentication(request):
    return render(request, 'registration/login.html')

编辑2 第二个views.py:

from django.utils import timezone
from .models import *
from django.shortcuts import render, get_object_or_404
from django.shortcuts import redirect
from django.contrib.auth.decorators import login_required
import wikipediaapi

def home(request):
  return render(request, 'worldmap/home.html',
             {'worldmap': home})

def denverText (request):
    wiki_wiki = wikipediaapi.Wikipedia('en')
    page_py = wiki_wiki.page('Denver')
    return page_py.summary[0:60];

@login_required
def plannerGetStarted (request):
    return render(request, 'worldmap/planner.html')

Snapshot Login

解决: 将此代码添加到我的views.py:

def authentication(request):
if request.method == 'POST':
    form = LoginForm(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('/home/')
        else:
            return HttpResponse('Disabled account')

    else:
        return HttpResponse('Invalid login')
else:
    form = LoginForm()

return render(request, 'registration/login.html', {'form': form})

1 个答案:

答案 0 :(得分:2)

所以这就是我认为这里发生的事情。如果我说你首先导航到/ accounts / login。

当您转到/ accounts / login时,django使用您的身份验证视图,该视图只会在不创建表单的情况下呈现html。这就是您最初没有看到字段的原因。

表单设置为提交到/ login /,因为操作设置为“{%url'thirdauth:login'%}”。 / login /正在使用默认的django登录视图。因此,一旦您在没有字段的情况下对表单进行求和,这会导致defualt视图中的错误,该错误会将您重定向回/ login /。这就是为什么您在单击提交后会看到“此字段是必需的”字段的字段。

希望能解释

相关问题