もた日記

くだらないことを真面目にやる

Djangoメモ(16) : フォームAPIを使わずにフォームを作成

  • フォームを表示するページ作成
  • フォーム作成
  • ビューの処理
  • Topic一覧表示
  • Topic作成ボタン追加
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にフォームを作成してみる。


フォームを表示するページ作成

DjangoではフォームAPIを使ってフォームを作成するが、理解を深めるためにまずはフォームAPIを使わずにフォームを作成してみる。そして、その後でフォームAPIを使ってフォームを作成する。
今回作成するフォームは新しいTopic(Board内のスレッド)とPost(Topicに対する返信だが、Topic作成時のメッセージも含む)を作成するフォームで完成形は下図。実際は誰がTopicとPostを作成したかを管理するがユーザ認証等については後で考える。

f:id:wonder-wall:20180315222108p:plain

続きを読む

Djangoメモ(15) : runserver_plusで対話型シェルを使ったデバッグ

  • Django Extensions, Werkzeugのインストール
  • runserver_plusの使い方
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考に掲示板アプリを作成中。


Django Extensions, Werkzeugのインストール

アプリを作成中だがデバッグしやすいようにDjango Extensionsに含まれるrunserver_plusを使ってみる。

github.com

Django ExtensionsはDjangoの拡張機能を集めたパッケージでpipでインストールできる。
runserver_plusを使用するにはWerkzeug(ドイツ語で工具、道具という意味)というWSGI Webアプリケーションライブラリが必要なので併せてインストールする。

$ pip install django-extensions Werkzeug
続きを読む

Djangoメモ(14) : Django Debug Toolbarでデバッグ情報を表示

  • Django Debug Toolbar
  • インストール
  • 各パネルの表示内容
  • パネル設定
  • debugsqlshellコマンド
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考に掲示板アプリを作成中。


Django Debug Toolbar

アプリを作成中だがデバッグしやすいように色々なデバッグ情報を表示できるDjango Debug Toolbarを使ってみる。

github.com

続きを読む

Djangoメモ(13) : extendsとblockでテンプレートの継承

  • 親テンプレート作成と継承
  • ナビゲーションバー追加
  • 参考:フォント変更
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にテンプレートを継承してみる。


親テンプレート作成と継承

テンプレートに共通部分がある場合は共通部分を親テンプレートとして定義し、子テンプレートに個別の処理を記述するのがメンテンナンスしやすい。
最初に親テンプレートとなるtemplates/base.htmlを下記内容で新規作成する。

{% load static %}<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>{% block title %}Django Boards{% endblock %}</title>
    <link rel="stylesheet" href="{% static 'css/bootstrap.min.css' %}">
  </head>
  <body>
    <div class="container">
      <ol class="breadcrumb my-4">
        {% block breadcrumb %}
        {% endblock %}
      </ol>
      {% block content %}
      {% endblock %}
    </div>
  </body>
</html>

{% block %}, {% endblock %}は領域を確保するタグで、子テンプレートでこのblock内のHTMLを置き換えることができる。 {% block title %}Django Boards{% endblock %}のようにデフォルト値を指定することもでき、子テンプレートで何も設定されない場合はこのデフォルト値が使用される。

続きを読む

Djangoメモ(12) : get_object_or_404ショートカットとリンクのテスト

  • get_object_or_404ショートカット
  • ナビゲーションリンクの追加とテスト
    • メインページの変更
    • 詳細ページの変更
  • まとめ

Python 3.6.4 Django 2.0.2

A Complete Beginner's Guide to Djangoのチュートリアルを参考にget_object_or_404ショートカットの利用とリンクのテストをしてみる。


get_object_or_404ショートカット

前回作成したTopic一覧を表示する詳細ページのテストをするためにmyproject/boards/tests.pyBoardTopicsTestsを追加。

from django.urls import reverse, resolve
from django.test import TestCase
from .views import home, board_topics
from .models import Board

class HomeTests(TestCase):
    # 省略

class BoardTopicsTests(TestCase):
    def setUp(self):
        Board.objects.create(name='Django', description='Django board.')

    def test_board_topics_view_success_status_code(self):
        url = reverse('board_topics', kwargs={'pk': 1})
        response = self.client.get(url)
        self.assertEquals(response.status_code, 200)

    def test_board_topics_view_not_found_status_code(self):
        url = reverse('board_topics', kwargs={'pk': 99})
        response = self.client.get(url)
        self.assertEquals(response.status_code, 404)

    def test_board_topics_url_resolves_board_topics_view(self):
        view = resolve('/boards/1/')
        self.assertEquals(view.func, board_topics)
続きを読む