Djangoにはdjango.contrib.authという認証システムが標準搭載されているみたいです。
しかし、その実装で苦戦したので、飾りのないシンプルな構成を記録しておきます。
ソースはココ。
こんな感じ
こんな感じで、飾りのないユーザ認証ができます。
飾り付けはご自由に。
5分で実装
再現性を保つために、プロジェクトの作成から始めます。
# プロジェクト作成
$ django-admin startproject myproject
$ cd myproject
# マイグレート
$ python manage.py migrate
# accountsアプリ作成(この名前じゃなきゃいけないっぽい?)
$ django-admin startapp accounts
# 設定をちょいといじる
$ vi myapp/settings.py
INSTALLED_APPS = [
'accounts.apps.AccountsConfig', # 追記
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
LOGOUT_REDIRECT_URL = '/' # 追記
# ルーティング設定
$ vi myproject/urls.py
=============ここから==============
from django.contrib import admin
from django.urls import path, include # 追記
urlpatterns = [
path('accounts/', include('django.contrib.auth.urls')), # 追記
path('', include('accounts.urls')), # 追記
path('admin/', admin.site.urls),
]
=============ここまで==============
# ルーティング設定
$ vi accounts/views.py
=============ここから==============
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
@login_required
def index(request):
return render(request, 'accounts/top.html')
=============ここまで==============
# テンプレートの作成
$ mkdir -p accounts/templates/accounts
$ mkdir accounts/templates/commons
$ mkdir accounts/templates/registration
# ベースとなるhtmlを作成
$ vi accounts/templates/commons/base.html
=============ここから==============
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>
{% block title %}{% endblock %}
</title>
</head>
<body>
{% block headertitle %}{% endblock %}
{% if user.is_authenticated %}
<a href="{% url 'logout' %}" class="logout">ログアウトするよん</a>
{% else %}
{% endif %}
{% block content %}{% endblock %}
</body>
</html>
=============ここまで==============
# ログイン後のトップページを作成
$ vi accounts/templates/accounts/top.html
=============ここから==============
{% extends "commons/base.html" %}
{% block title %}トップページだよん{% endblock %}
{% block headertitle %}ヘッダーだよん{% endblock %}
{% block content %}<h1>キタ━━━━━━(゚∀゚)━━━━━━ !!!!!</h1>{% endblock %}
=============ここまで==============
# ログイン画面の作成
$ vi accounts/templates/registration/login.html
=============ここから==============
<!DOCTYPE html>
<html lang="ja-JP" >
<head>
<title>ログイン</title>
</head>
<body>
<form method="post" action="{% url 'login' %}">
{% csrf_token %}
<input type="text" name="username" placeholder="ユーザー名">
<input type="password" name="password" placeholder="パスワード">
<input type="submit" class="btn btn-primary btn-block" value="ログイン" />
<input type="hidden" name="next" value="{{ next }}" />
</form>
</body>
</html>
=============ここまで==============
# 管理ユーザの作成
$ python manage.py createsuperuser
# 開発サーバ起動
$ python manage.py runserver
# 以下にアクセスし、ユーザ認証を確認する
http://localhost:8000/
コメントを残す