Django newbieここでカスタムログインフォーム、ビュー、テンプレートを作成しようとしています。私の問題は、私のビューのロジックはフォームが表示されない原因となり、代わりにelseステートメントからのエラーメッセージが常に表示されることです。私は何かが欠けていると確信しています、私はそれが何であるか分かりません。誰かが私を正しい方向に向けることができますか?私はDjangoのドキュメントとこのチュートリアルから作業しています:http://www.djangobook.com/en/2.0/chapter14.htmlありがとう!カスタムDjangoログインページでログインフォームが表示されない
UPDATE:ユーザー@AKSはPOST/GETロジックを適切に処理していないと指摘したので、これを答えとして受け入れました。コードを調整してもフォームは表示されないので、HTMLファイルでいくつかのエラーを見つけて修正しました。修正されたコードはこの記事の一番下に示されています。
-
# Django imports
from django import forms
from django.contrib import auth
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User
from django.contrib.auth.views import login, logout
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, redirect, render
from django.utils import timezone
# Local Django imports
from .models import *
from .forms import *
def login(request, method='POST'):
'''Shows a login form and a registration link.'''
username = request.POST.get('username', '')
password = request.POST.get('password', '')
user = auth.authenticate(username=username, password=password)
if user is not None and user.is_active:
auth.login(request, user)
return HttpResponseRedirect("client/items")
else:
return HttpResponse("Invalid login. Please try again.")
return render(request, "registration/login.html", {'next':'/client/items'})
- - views.py登録/ login.htmlと -
{% extends "registration/base.html" %}
{% block content %}
{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}
<form method="post" action='/login'>{% csrf_token %}
<table>
<tr>
<td>{{ form.username.label_tag }}</td>
<td>{{ form.username }}</td>
</tr>
<tr>
<td>{{ form.password.label_tag }}</td>
<td>{{ form.password }}</td>
</tr>
</table>
<input type="submit" value="Login" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
{% endblock %}
- settings.py -
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'clients'
]
MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
- アプリ/ urls.py -
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.login, name='login'),
url(r'^register$', views.register, name='register'),
url(r'^client/items$', views.client_items, name='client_items'),
url(r'^client/new_item$', views.new_item, name='new_item'),
url(r'^client/edit_item$', views.edit_item, name='edit_item'),
url(r'^client/item_detail$', views.item_detail, name='item_detail'),
]
- 登録/ login.htmlと修正さ -
{% extends "registration/base.html" %}
{% block content %}
{% if form.errors %}
<p>Your username and password didn't match. Please try again.</p>
{% endif %}
<form method="post" action=''>{% csrf_token %}
<label for="username">Username:</label>
<input type="text" name="username" value="" id="username"><br>
<label for="password">Password:</label>
<input type="password" name="password" value="" id="password"><br>
<input type="submit" value="Login" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
{% endblock %}
:
あなたが
POST
リクエストでフォームを処理し、GET
要求の場合には、ログインフォームを返す必要がありますが? –いいえ、ログインしていません! – allardbrain
:)それはそれを修正しましたか? –