開発

20150727_作業メモ


Djangoのユーザ認証まとめ – c-bata web
を参考にユーザ認証機能を追加する。

mapsdependa/urls.pyに以下の行を追加。
url(r'^accounts/', include('apps.accounts.urls', namespace='accounts')),

accountsのImport Errorが出ていたが、原因はapps.accounts.urlsの部分。もともとは、accounts.urlsでappsを追加した。アプリの場所をちゃんと指定しないとダメ。

apps/accounts/urls.pyを作成して、以下を設定。

vi urls.py

from django.conf.urls import patterns, url
from . import views

urlpatterns = patterns('',
    url(r'^login/$', 'django.contrib.auth.views.login',
        {'template_name': 'accounts/login.html'}),
    url(r'^logout/$', 'django.contrib.auth.views.logout',
        {'template_name': 'accounts/logout.html'}),
)

templatesにaccountsを作成。templates/accounts/にlogin.html、logout.htmlを新規作成。

login.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 'accounts: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 %}

logout.html

{% extends "base.html" %}

{% block title %}ログアウト{% endblock title %}

{% block content %}

    <h3 class="page-header">ログアウトしました</h3>

{% endblock content %}

一箇所変更点がある。
login.html

<form method=”post” action=”{% url ‘accounts:django.contrib.auth.views.login’ %}”>
で、
django.contrib.auth.views.login

accounts:django.contrib.auth.views.login
とした。

accountsは、urls.pyで設定したnamespase。
url(r'^accounts/', include('apps.accounts.urls', namespace='accounts')),

・参考
django – no reverse match for login view – codeotel.com
django – no reverse match for login view – Stack Overflow

以前試した時には出なかったエラーなので、Djangoのバージョンか、他のパッケージの問題と思われる。確かpythonは3.4.3だった気がするので。

以下はエラー画面のメモ。
スクリーンショット 2015-07-27 22.45.29