1

私はDjangoを初めて使用django.contrib.auth.views.loginし、Django1.4を使用して自分のWebページ用の簡単なログインシステムを構築しようとしています。次のログインフォームを含む基本テンプレートがあり、それが自分のWebサイトの他のテンプレートページによって拡張されています。

<form method="post" action="/accounts/login/">
{% csrf_token %}
<p><label for="id_username">Username:</label> <input id="id_username" type="text" name="username" maxlength="30" /></p>
<p><label for="id_password">Password:</label> <input type="password" name="password" id="id_password" /></p>
<input type="submit" value="Log in" />
<input type="hidden" name="next" value="{{ request.get_full_path }}" />
</form>

ただし、ログインしようとすると、次のメッセージが表示されます。

「禁止(403)CSRF検証に失敗しました。リクエストは中止されました。失敗の理由:CSRFトークンが見つからないか正しくありません。」

urls.pyからの関連スニペット:

url(r'^accounts/login/$', 'django.contrib.auth.views.login')

およびsettings.py:

TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
)

.....

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
)
.....
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)

助言がありますか?

4

2 に答える 2

7

簡単なログイン/ログアウトシステムはここにあります

Djangoのユーザーモデルで標準認証を使用する方法を簡単に説明します。

appname / views.py:

from django.http import HttpResponse
from django.contrib.auth import authenticate, login
from django.contrib.auth.decorators import login_required
from django.template import Context, loader, RequestContext
from django.shortcuts import render_to_response
from django.template import 

@login_required
def stat_info(request):
return render_to_response('stat_info.html',
  {'is_auth':request.user.is_authenticated()},
  context_instance=RequestContext(request))

@login_required
def mainmenu(request):
return render_to_response('mainmenu.html',{},
  context_instance=RequestContext(request))

urls.py:

from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    (r'^statinfo/$', 'appname.views.stat_info'),
    (r'^accounts/login/$', 'django.contrib.auth.views.login'),
    (r'^accounts/logout/$', 'django.contrib.auth.views.logout', {'next_page' : '/accounts/login'}),
    (r'^mainmenu/$', 'appname.views.mainmenu')
)

settings.py:

...        
LOGIN_REDIRECT_URL='/mainmenu/'
...

テンプレート/登録/ログイン.html:

{% extends "base.html" %}
{% block content %}
    {% if form.errors %}
    <p>Your username and password didn't match. Please try again.</p>
    {% endif %}
    <form method="post" action="{% url django.contrib.auth.views.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 %}

テンプレート/base.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <link rel="stylesheet" href="style.css" />
    <title>{% block title %}templates/base.html{% endblock %}</title>
</head>
<body>
<div id="sidebar">
    {% block sidebar %}
    <ul>
        <li><a href="/">Home</a></li>

        {% if user.is_authenticated %}
            <li><a href="/accounts/logout">Logout</a></li>
        {% else %}
            <li><a href="/accounts/login">Login</a></li>
        {% endif %}
    </ul>
    {% endblock %}
</div>
<div id="content">
    {% block content %}{% endblock %}
</div>
</body>
</html>

templates / mainmenu.html:

<!DOCTYPE html>
{% extends "base.html" %}
<html>
<head>
    <title>{% block title %}templates/mainmenu.html{% endblock %}</title>
</head>
<body>

<div id="content">
    {% block content %}
    Mainmenu
    <a href="/statinfo/">stat info</a>
    {% endblock %}

</div>

</body>
</html>

テンプレート/stat_info.html:

<!DOCTYPE html>
{% extends "base.html" %}
<html>
<head>
    <title>{% block title %}templates/mainmenu.html{% endblock %}</title>
</head>
<body>

<div id="content">
    {% block content %}
    Mainmenu
    <a href="/statinfo/">stat info</a>
    {% endblock %}

</div>

</body>
</html>
于 2013-01-17T17:16:50.213 に答える
0

モデル:

クラスUserProf(models.Model):

"""
Create  ``RegistrationProfile for User``
"""
user = models.OneToOneField(User)

""" Other fields here """
address1 = models.CharField(max_length=100,blank=True)
address2 = models.CharField(max_length=100,blank=True)
city = models.CharField(max_length=40,blank=True)
country = models.CharField(max_length=40,blank=True)
age = models.IntegerField(blank=True)

ビュー:

django.contrib.authからインポート認証、ログイン

def user_authenticate(request):

"""
    check username and password and displays its appr. user_profile page
"""

username = password = ''
if request.POST:
    username = request.POST.get('username')
    password = request.POST.get('Password')

    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request,user)
            return HttpResponseRedirect('/profile/')

    else:
        return HttpResponseRedirect('/qioness/connect/')
else:
    return HttpResponseRedirect('/qioness/connect/')

URL:

url(r'^ profile / $'、show_detail)、

レンプレート:

          <form action="/qioness/" method="post">
                       <label>

                        <strong class="email-label">Username</strong>

                        <input type="text"  id="Email" name="username">

                        <span class="login_error"></span>

                      </label>

                      <label>
                          <strong class="passwd-label">Password</strong>
                          <input type="password" id="Passwd" name="Password">

                          <span class="login_error">  </span>
                      </label>

                   <input name="Add" type="submit" value="Log" class="Submit_btn" />


                          <label class="remember">
                              <input type="checkbox" value="yes" id="PersistentCookie" name="PersistentCookie">
                              <strong class="remember-label">
                                   Remember Me
                              </strong>
                          </label>
         </form>

       </div>

4私で働いた:)

于 2012-11-30T15:11:11.093 に答える