Djangoでユーザー登録とログイン認証を実装する

Djangoでサインアップ・ログイン認証を実装する

今回はDjangoを使って作成したサイトにユーザー登録する仕組み、つまりサインアップとログイン認証を実装していきたいと思います。

これまでのDjangoの関連の記事は↓のにあります。

【python】Djangoを使ってウェブサイトを作成する その1

【python】Djangoを使ってウェブサイトを作成する その2

【python】Djangoを使ってウェブサイトを作成する その3

というわけで実際に編集に入っていきます。まず前準備としてデータマイグレーションでデータベースにデータテーブルを作成しておく必要があります。

htmlを用意する

サイトやアプリ作りでます必要になってくるがhtmlです。今回はログインとユーザー登録機能を付けるので、最低でもとログイン画面・ログアウト画面・サインアップ(登録画面)の3つのhtmlファイルが必要になってきます。

まあ自分でおしゃれなものが作れるのであれば、それに越したことはないのですが、一応Django公式のGithubに基本テンプレhtmlがあるので、とりあえず体裁が整ってりゃいいという人はそちらを使うといいでしょう。

テンプレートのパス(ディレクトリとファイル名)はあらかじめ決められています。Django公式が推奨しているパスはlogin.html・logged_out.html・signup.htmlの3つです。

https://github.com/toksan/django2_tutorial_blog_with_auth/tree/master/myblog/templates/registration

そして、base.htmlも追加で作ります。今回はデフォルトで拾った適当なやつを使います。

♯base.html
<html lang="en">
<head>
<link rel="stylesheet" href="style.css" />
<title>{% block title %}My site{% endblock %}</title>
</head>

<body>
<div id="sidebar">
{% block sidebar %}
<ul>
<li><a href="/">Home</a></li>
</ul>
{% endblock %}
</div>

<div id="content">
{% block content %}{% endblock %}
</div>
</body>
</html>

ベーステンプレートを作成したら、login.html・logged_out.htmlの2つを「templates」の中に「registration」というフォルダを新規作成し、その中に設置します。そして、「accounts」の中にsignup.htmlの置きます。

「registration」 と「accounts」というディレクトリを作る必要があるのは Django のコマンドで作成したpyファイルの中にそういう風にパスを通さないといけないように決まっているからです。

これでMTVのT(templates)の部分は用意できました。次はV(views)にあたる部分を編集していきます。

アカウントクラスの作成

まずアカウント関係の処理を記述するアカウントクラスを実装します。

♯アカウントクラスの実装
$ django-admin startapp accounts

これでプロジェクトフォルダ(今回はmysite)ディレクトリの直下に「accounts」というフォルダが作成されます。

スポンサーリンク

setting.pyを編集する

まずはsetting.pyを編集してログインしたあとリダイレクトさせたいページを指定します。トップページにリダイレクトさせたい場合は以下のように記述します。

# ログイン後トップページにリダイレクト
LOGIN_REDIRECT_URL = '/'

加えて、install.appsの部分も編集します。

INSTALLED_APPS = [
    'accounts.apps.AccountsConfig',
    'boards.apps.BoardsConfig',
    ...
]

次はurlを紐づけするため、mysite/mysite/urls.pyのurlpatternsに以下の関数を記述します。

♯urlのところに追記する
path('accounts/', include('django.contrib.auth.urls')), 
path('accounts/', include('accounts.urls')),

これで、manage.py runserverを実行した場合以下のURLパターンが有効になります。もちろん対応するhtmlはそれぞれ自分で用意する必要があります。

accounts/login/ [name='login']
accounts/logout/ [name='logout']
accounts/password_change/ [name='password_change']
accounts/password_change/done/ [name='password_change_done']
accounts/password_reset/ [name='password_reset']
accounts/password_reset/done/ [name='password_reset_done']
accounts/reset/<uidb64>/<token>/ [name='password_reset_confirm']
accounts/reset/done/ [name='password_reset_complete']

次はmysite/accounts/urls.py を新規作成して、urlpatternsのところに追記します。

from django.urls import path
from . import views

# set the application namespace
# https://docs.djangoproject.com/en/2.0/intro/tutorial03/
app_name = 'accounts'

urlpatterns = [
path('signup/', views.SignUpView.as_view(), name='signup'),
]

次はmyblog/accounts/views.py を編集します。

from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse_lazy
from django.views import generic

class SignUpView(generic.CreateView):
      form_class = UserCreationForm
      success_url = reverse_lazy('login')
      template_name = 'accounts/signup.html'

これで基本的な設定は終わりです。ちゃんと実装できているか試しpython manage.py runserverでmanage.pyを起動してみます。

起動したら、/accounts/signup/をアクセスします。成功していれば以下のような画面が表示されるはずです。

とりあえず適当に登録してみます。ユーザー名はhoge、パスワードはhogehoge2018とでもしておきます。

これで登録出来たら次はログイン画面に移動します。

ちなみにここで登録したユーザー情報は、db.sqlite3のauth‗userというデータテーブルの中に格納されています。ログアウトすると以下のような画面になります。

とりあえずこれで基本的な実装はできました。ですが、このままだとスクリプトとか組まれた場合に無限にアクセスされる危険性があるので、メール認証なり、試行回数に制限を設ける必要があります。

またDjangoにデフォルトで実装されているユーザー登録・ログイン認証システムは一般的で、twitterなどのSNSを使ってOath認証みたいな別の認証を実装する場合は、追加で別のライブラリをインストールする必要があります。

Djangoについては、日本語の参考書もまだ少なく独学するのは難しいですが、Python学習サービス「PyQ™(パイキュー)」で勉強すれば、Djangoを使ったECサイトの構築や機械学習を使ったWebアプリも作れるようになるので、独学で行き詰っている方には非常にオススメだと思います。


「Python学習サービス「PyQ™(パイキュー)」の詳細を見てみる」

参照:https://it-engineer-lab.com/archives/544

プログラミングの独学はとても難しい


プログラミングは小学校の義務教育にも導入され始めており、これから社会人として生きていく上でプログラミングはもはや出来て当たり前、出来なれば論外というエクセルレベルの必須スキルになりつつあります。そしてそういう話を聞いて参考書なりを購入して独学でプログラミング勉強しようと思っている人も少なくないでしょう。しかしプログラミングを独学で勉強し始めようと思うものの



・「分からない箇所で詰まって挫折してしまった」

・「勉強する時間が足りない」

・「ネットの記事だと情報が断片的でよくわからない」

・「コードのエラーの原因が分からない」



という壁にぶち当たって、プログラミングの勉強を止めてしまう方が少なくありません。独学でプログラミングを勉強してる時間のほとんどはつまづいている時間です。実際僕も最初のころ独学でプログラミングを勉強していた頃はエラーの原因が分からず丸1日を不意にしてしまった・・・そんな苦い経験がありました。



それで僕は一度はプログラミングの学習を諦めてしまいましたが、就活で現実を知る中で「プログラミングを勉強して、いずれフリーランスとして自由な生き方がしたい」「エンジニアとして若いうちから高収入を得たい」という気持ちから一念発起して「侍エンジニアのwebサービスコース」に申し込み、プロのエンジニアの方に対面でマンツーマンでPythonによるWebサービス作り方とWeb技術の基本を教えてもらい、ようやくプログラミングが理解でき、今ではエンジニアとしてそこそこの暮らしができるようになりました。





侍エンジニアでは、とりあえずプログラミングやインターネットの基本を知っておきたい人から、HTML・cssなどでWebサイトやWebアプリを作ってみたい人やPythonを勉強してデータサイエンティストやAIエンジニアになりたい人まで幅広いニーズに応えた様々なコースが用意されています。



IT業界と言ってもエンジニアの仕事はプログラミング言語次第でサーバーから機械学習・ディープラーニングまで多種多様ですし、侍エンジニアの無料レッスン(カウンセリング)を受けてみて、自分のやりたいITの仕事は何なのか?を見つけるのがエンジニアへの第一歩になります。ちなみに今侍エンジニアの無料レッスンを受けると1000円分のAmazonギフト券がもらえるので、試しに受けてみるだけもお得です。


自分は半端に独学やオンラインスクールで勉強して金と時間を無駄にするくらいなら、リアルのプログラミングスクールに通ってしっかりプログラミングを勉強した方がいいと思います。ちなみに今、侍エンジニアに申し込むと、25歳以下の学生の方であれば、受講料が20%OFFになるので超お得です。


そして、プログラミングは大勢で授業を受けたり漫然とオンライン学習をするよりも自分が分からない箇所をピンポイントでプロの講師に直接質問して、ちゃんと納得するというスタイルの方がお金は確かに少し掛かりますが、独学で学ぶよりも絶対にモノになります。


シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. Aaronpoela より:

    http://buymetformin.team/ – buy metformin no prescription

  2. Tesamalk より:

    Manufacturer cialis 20mg
    Buy Cheap Cialis Online
    canada cialis online pharmacy
    Buy Cheap Cialis Online

  3. Aaronpoela より:

    http://ventolin.yoga/ – proventil hfa 90 mcg inhaler

  4. chefag より:

    Generic cialis tadalafil 20mg
    Buy Cialis Online

  5. Aaronpoela より:

    http://lasix.best/ – buy lasix online no prescription

  6. Aaronpoela より:

    http://buyfurosemide.team/ – furosemide 40 mg without prescription