djangoでwebアプリを開発し始めたました。今回はログイン機能を実装したのでまとめます。
参考文献はこちらです。
appの概要
ログインページ→ログインする→appのトップページという設計です。
ログイン機能を実装するにあたってあまり必要ないですが「数式とそのtexコマンドが一発で確認できる」という、いうなればtexの数式チートシートです。app名は「RAKURAKUtex」です。
ログイン機能の実装
- accountsアプリの作成
appがあるディレクトリにいき、以下を実行します。
1 |
python manage.py startapp accounts |
他のアプリ作成時同様、myapp/setting.pyに以下を追記する。
ログインするためのurlとログアウトのurl、リダイレクト先のurl(ログイン後に飛んだ先のurl)もここで設定してしまいましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', ・・ ・・ 'accounts', # 追加 ] ####こちらも追記 LOGIN_URL = 'accounts/login/' LOGOUT_URL = 'accounts/logout' LOGIN_REDIRECT_URL = '/cms/book/' |
- URLの設定
myapp/urls.pyに以下を追記します。
1 2 3 4 5 6 |
urlpatterns = [ url(r'^admin/', admin.site.urls), ・・・ ・・・ url(r'accounts/', include('accounts.urls')), # 追加 ] |
次にaccountsディレクトリ内にいき、新たに以下の内容で「urls.py」を作成します。
1 2 3 4 5 6 7 8 9 10 |
from django.conf.urls import url from django.contrib.auth.views import login,logout urlpatterns = [ url(r'^login/$', login, {'template_name': 'accounts/login.html'}, name='login'), url(r'^logout/$', logout, {'template_name': 'accounts/logged_out.html'}, name='logout') ] |
- templatesの作成
accountsディレクトリ内に、templatesディレクトリを作成。さらにそのtemplatesディレクトリ内にaccountsディレクトリを作成。そしてその中でlogin.htmlを以下の内容で作成する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
{% extends "admin/base.html" %} {# ① #} {% block content %} {% if form.errors %} <div class="alert alert-danger" role="alert"> <p>Your usernamne and password didn't match. Please try again.</p> </div> {% endif %} <div class="panel panel-primary"> <div class="panel-heading"> <h3 class="panel-title text-center">Log-in to mysite</h3> </div> <div class="panel-body"> <form action="{% url 'login' %}" method="post" role="form"> {% csrf_token %} <div class="input-group" style="margin-bottom:10px"> <span class="input-group-addon"><i class="fa fa-user fa-fw"></i></span> <input id="id_username" name="username" type="text" value="" maxlength="256" placeholder="Username" aria-describedby="sizing-addon1" autofocus required/> {# ② #} </div> <div class="input-group" style="margin-bottom:10px"> <span class="input-group-addon"><i class="fa fa-lock fa-fw"></i></span> <input id="id_password" name="password" type="password" value="" maxlength="256" placeholder="Pasword" aria-describedby="sizing-addon1" required/> {# ② #} </div> <button type="submit" style="margin-bottom:-20px"><i class="fa fa-sign-in">Login</i></button> <input name="next" type="hidden" value="{{ next }}"/> {# ③ #} </form> </div> </div> {% endblock %} |
ディレクトリ構造は→accounts/templates/accounts/login.html となります。
ログアウトページのtemplatesも同様に作成します。accounts/templates/accounts内にlogged_out.htmlを以下の内容で作成します。
1 2 3 4 5 6 7 8 9 |
{% extends "admin/base.html" %} {% block title %}ログアウト{% endblock title %} {% block content %} <h3 class="page-header">ログアウトしました</h3> {% endblock content %} |
以上で実装は完了です。試してみましょう。
実際に動かす
- http://127.0.0.1:8000/accounts/login/にアクセスします
ログインをクリックすると、
RAKURAKUTeXのページ(settings.pyで指定したリダイレクト先のurl)に行きます。
試しにログアウトも動くかどうか確認します。
- http://127.0.0.1:8000/accounts/logged_out/にアクセスします
うまく動いているようです。しかしこれだとログアウトをwebアプリから直接できるわけではないので、ログアウトページを作成しただけになります。ログアウトの機能も作ったらまた更新します。
スポンサーリンク