为一个类开发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')
解决: 将此代码添加到我的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})
答案 0 :(得分:2)
所以这就是我认为这里发生的事情。如果我说你首先导航到/ accounts / login。
当您转到/ accounts / login时,django使用您的身份验证视图,该视图只会在不创建表单的情况下呈现html。这就是您最初没有看到字段的原因。
表单设置为提交到/ login /,因为操作设置为“{%url'thirdauth:login'%}”。 / login /正在使用默认的django登录视图。因此,一旦您在没有字段的情况下对表单进行求和,这会导致defualt视图中的错误,该错误会将您重定向回/ login /。这就是为什么您在单击提交后会看到“此字段是必需的”字段的字段。
希望能解释