フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

Djangoユーザー認証が便利②

はじめに

  • 前回、Djangoのユーザー認証回りのユーザー登録とログイン回りを実装したので、今回はログアウト、ログイン判定をしていく。

ユーザー管理

下記の機能を実装することが可能です。 - ユーザー登録(前回) - ログイン(前回) - ログアウト - 認証 - ログイン判定

コード

アプリケーションのsetting.py

from django.urls import path
from .views import signup, login, logout_view

urlpatterns = [
    path('signup/', signup, name='signup'),
    path('login/', login, name='login'),
    path('logout/', logout_view, name='logout'),
]

アプリケーションのview.py

  • ログアウトの場合
from django.contrib.auth import logout

def logout_view(request):
    logout(request)
    return redirect('login')
  • ログインしているかの判定はlogin_requiredデコレータを利用してログイン済みユーザのみに閲覧制限をかける。 下記の例はユーザーリストのviewはログインユーザーのみみせたい場合に@login_requiredを指定する
from django.contrib.auth.decorators import login_required

@login_required
def userlist(request):
    return render(request, 'list.html')

アプリケーションのview.py

  • View側はuser.is_authenticatedでユーザーがログインしているか、していないかで判定することが可能である
  • ログインしていたら、user.usernameなどでユーザー情報を簡単に取得することが可能である。
{% extends 'base.html' %}

{% block content %}

{% if user.is_authenticated %}
<form action='' method="POST" enctype="multipart/form-data">{% csrf_token %}
    <p>タイトル:<input type="text" name="title"></p>
    <p>内容:<input type="text" name="content">/p>
    <p>画像:<input type="file" name="images"></p>
    <input type="hidden" name="author" value={{ user.username }}>

    <input type="submit" value="作成する">
</form>
{% else %}
ログインしてください
{% endif %}

{% endblock content%}