Djangoメモ(19) : ユーザー認証を実装する〜サインアップ(ユーザー登録)
- ユーザー認証
- accountsアプリ作成
- サインアップページ作成
- フォーム作成
- ビューの処理
- データベースの確認
- まとめ
A Complete Beginner's Guide to Djangoのチュートリアルを参考にユーザー認証を実装してみる。
ユーザー認証
Djangoの認証システムを使用して下記機能が使えるユーザー認証を実装していく。
なお、チュートリアルはDjango 1.11で書かれているためDjango2.0ではもっと良い実装方法があるかもしれないが、まずはチュートリアル通りに実装してみる。
- サインアップ(ユーザー登録)
- ログイン
- ログアウト
- パスワードリセット
- パスワード変更
Djangoメモ(18) : django-widget-tweaksを使用してBootstrapのフォームを作成する
- django-widget-tweaksのインストール
- テンプレートの編集
- 再利用可能なテンプレート
- フォームのテストを追加
- (参考)django-widget-tweaksで発生したエラー
- まとめ
A Complete Beginner's Guide to Djangoのチュートリアルを参考にdjango-widget-tweaks
を使用してBootstrapのフォームを作成してみる。
django-widget-tweaksのインストール
チュートリアルではdjango-widget-tweaks
を使用しているが、Django 2.0ではエラーが発生(後述)したのでdjango-widget-tweaks
をフォークしたdjango-widgets-improved
をインストールする(ただしこの記事ではdjango-widget-tweaks
として説明する)。
django-widget-tweaks
はテンプレートでフォームをレンダリングするときにCSSクラスやHTML属性を変更できるモジュール。
$ pip install django-widgets-improved続きを読む
Djangoメモ(17) : フォームAPIを使用したフォームの作成とテスト
- フォームのテストを追加
- フォームAPI : ビュー側
- フォームAPI : テンプレート側
- まとめ
A Complete Beginner's Guide to Djangoのチュートリアルを参考にフォームAPIを使用してフォームを作成してみる。
フォームのテストを追加
前回フォームAPIを使用せずにフォームを作成したので、まずはそれに対するテストを追加する。
boards/tests.py
のNewTopicTests
を以下のように編集する。
from django.urls import reverse, resolve from django.test import TestCase from django.contrib.auth.models import User from .views import home, board_topics, new_topic from .models import Board, Topic, Post class NewTopicTests(TestCase): def setUp(self): Board.objects.create(name='Django', description='Django board.') User.objects.create_user(username='john', email='john@doe.com', password='123') # <- included this line here # ... def test_csrf(self): url = reverse('new_topic', kwargs={'pk': 1}) response = self.client.get(url) self.assertContains(response, 'csrfmiddlewaretoken') def test_new_topic_valid_post_data(self): url = reverse('new_topic', kwargs={'pk': 1}) data = { 'subject': 'Test title', 'message': 'Lorem ipsum dolor sit amet' } response = self.client.post(url, data) self.assertTrue(Topic.objects.exists()) self.assertTrue(Post.objects.exists()) def test_new_topic_invalid_post_data(self): ''' Invalid post data should not redirect The expected behavior is to show the form again with validation errors ''' url = reverse('new_topic', kwargs={'pk': 1}) response = self.client.post(url, {}) self.assertEquals(response.status_code, 200) def test_new_topic_invalid_post_data_empty_fields(self): ''' Invalid post data should not redirect The expected behavior is to show the form again with validation errors ''' url = reverse('new_topic', kwargs={'pk': 1}) data = { 'subject': '', 'message': '' } response = self.client.post(url, data) self.assertEquals(response.status_code, 200) self.assertFalse(Topic.objects.exists()) self.assertFalse(Post.objects.exists())続きを読む
Djangoメモ(16) : フォームAPIを使わずにフォームを作成
- フォームを表示するページ作成
- フォーム作成
- ビューの処理
- Topic一覧表示
- Topic作成ボタン追加
- まとめ
A Complete Beginner's Guide to Djangoのチュートリアルを参考にフォームを作成してみる。
フォームを表示するページ作成
DjangoではフォームAPIを使ってフォームを作成するが、理解を深めるためにまずはフォームAPIを使わずにフォームを作成してみる。そして、その後でフォームAPIを使ってフォームを作成する。
今回作成するフォームは新しいTopic(Board内のスレッド)とPost(Topicに対する返信だが、Topic作成時のメッセージも含む)を作成するフォームで完成形は下図。実際は誰がTopicとPostを作成したかを管理するがユーザ認証等については後で考える。
続きを読む
Djangoメモ(15) : runserver_plusで対話型シェルを使ったデバッグ
- Django Extensions, Werkzeugのインストール
- runserver_plusの使い方
- まとめ
A Complete Beginner's Guide to Djangoのチュートリアルを参考に掲示板アプリを作成中。
Django Extensions, Werkzeugのインストール
アプリを作成中だがデバッグしやすいようにDjango Extensionsに含まれるrunserver_plus
を使ってみる。
Django ExtensionsはDjangoの拡張機能を集めたパッケージでpipでインストールできる。
runserver_plus
を使用するにはWerkzeug
(ドイツ語で工具、道具という意味)というWSGI Webアプリケーションライブラリが必要なので併せてインストールする。
$ pip install django-extensions Werkzeug続きを読む