Web Application: 第8回 Djangoやります

こんにちは Keita_Nakamori(´・ω・)です。

さて、前回まででTensor Flow を使ったスクリプトを書いてきましたが、これをwebアプリとしてアクセスできるようにDjangoを組み込んでいきます。

django公式サイト

djangoインストール方法

$ pip install Django

django-2.2.5 が入りました

プロジェクトを作成する

djangoでは大項目としてプロジェクト名、小項目としてアプリケーション名があります。後々ひとつのプロジェクトの下に複数のアプリケーションを作っていくことになります。

では、myprojectというプロジェクトを作ります

djangoプロジェクトの生成

$ django-admin startproject myproject

これでmyprojectというプロジェクトフォルダが生成されました。

フォルダの下層にはmange.pyという管理用のpythonファイルと、プロジェクト名と同じ名称で設定用のmyproject設定フォルダが生成されます。

 

  • myproject/:プロジェクト全体のフォルダ
    • manage.py:管理用pythonスクリプト(サーバー起動 アプリフォルダの生成など)
    • myproject/:プロジェクト設定フォルダ
      • __init__.py:プロジェクト初期値スクリプト
      • settings.py:プロジェクト設定用スクリプト
      • urls.py:プロジェクトurlルーティング用スクリプト
      • wsgi.py:python:アプリ実行環境ウィズギーのスクリプト

用語 ウィズギーとは

Web Server Gateway Interface (WSGI; ウィズギー)

webサーバーとwebアプリ(またはwebフレームワーク)を接続するためのインターフェース定義。

WSGIはこれまでFastCGI, mod_python, CGIなど様々なインターフェース定義が乱立している中で最終的にpythonにおける最有力規格となったインターフェース定義。python webフレームワークで有力なFlaskとかBottletoとかDjangoが採用しているので、かなり盤石。

開発用の内蔵サーバーを起動する

管理スクリプトmanage.pyを使ってmyprojectプロジェクト全体フォルダから

$ python manage.py runserver

とランサーバー指令をコマンドプロンプトに打つと

と出るので、http://127.0.0.1:8000/がサーバーとして動き出します。

実際にブラウザのURLバーにこれをコピペすると、インストールが完了しましたとお祝いの言葉を頂戴できます。

強制終了は CTRL-BREAKと書いてありますが、control+c のことです。

簡単なwebアプリケーションを作ってみる

hello worldと表示するwebアプリケーションを作ってみましょう。

runserverしっぱなしの場合はctl+cで一旦止めておきます。

myproject プロジェクトフォルダに戻ってみたら、db.sqlite3 というデータベースが生成されていました。まだカラのようで容量は0KBです。

つづきまして、アプリケーションのフォルダを作りましょう。

スタートアップですがstartup ではなくて startappなので要注意です。

$myproject>python manage.py startapp car_motorbike

これでmyprojectプロジェクトフォルダ直下に car_motorbikeアプリケーションフォルダが生成されました。

現在のフォルダ構成をおさらいすると、

  • myproject:プロジェクト全体フォルダ
    •  car_motorbike:アプリケーションフォルダ
    • db.sqlite3:データベースファイル
    • manage.py:プロジェクト管理フォルダ
    • myproject:プロジェクト設定フォルダ

そして、car_bikeアプリケーションフォルダの中には、各種pythonスクリプトが新しく生成されました。今後はここを弄っていくことになります。

  • car_motorbikeアプリケーションフォルダ
    • admin.py
    • apps.py
    • migrations/
    • models.py :データベースにアクセスしてデータを取得するスクリプト
    • tests.py
    • views.py:ブラウザ表示内容(テンプレート)を呼び出すスクリプト
    • __init__.py

VScodoで構造を見てみると、まだ何も弄ってないのにこれだけのファイル数になります。ではviews.pyを開いて編集していきましょう。

views.py を編集する

オリジナルは下記のような2行のコードです。

これを編集してHTMLのindex.htmlに相当する部分を作っていきます。

アクセスが来たときに hello_worldとレスポンスを返すためのHttpRespose関数をインポートして使用します。

これはまだ、呼び出されたときの挙動を定義しただけですので、このindex(request)関数を呼び出すためのスクリプトが別途必要です。

urls.py を編集する

次に、views.pyを実行できるようにurl.pyでURLと表示内容(views.py)を関連付けます。
オリジナルは下記のようなコードです。
コメントアウトされた使い方の部分とURLパターンを定義するリストが存在するだけです。

コメントアウトの部分を読んでみましょう。

(google翻訳すると スクリプト部分まで和訳されて意味不明でした。)

myproject URL設定

urlpatternsリストはURLをビューにルーティングします。 詳細については、以下を参照してください。
https://docs.djangoproject.com/en/2.2/topics/http/urls/例:

機能ビュー

1.インポートの追加:

from my_app import views

2. urlpatternsにURLを追加します:

 path('', views.home, name='home')

クラスベースのビュー

1.インポートを追加します:

from other_app.views import Home

2. URLをurlpatternsに追加します:

path('', Home.as_view(), name='home')

別のURLconfを含める

1. include()関数をインポートします:

from django.urls import include, path

2. urlpatternsにURLを追加

path('blog/', include('blog.urls'))

イメージが全然わきませんね。

urls.py を編集する

機能ビューの

  1. インポートの追加:
  2.  URLをurlpatternsに追加します:

をやってみます。

公式サイトに従ってインポートをfrom car_motorbike import views としてしまうとあとあとcar_motorbike以外のアプリを作成して時に form xxx import viewsというようにかぶってしまうので、ここではimport car_motorbike.views as carbike として被らないようにします。

では開発用サーバーを起動してみましょう。
>python manage.py runserver
http://127.0.0.1:8000/
not foundの404エラーが出ていますが、作ってないので当然出ます。問題ありません。
そして、先程作ったcarbikeのページを見てみましょう。
http://127.0.0.1:8000/carbike/
というように、ちゃんと機能しています。
今一度思い起こすと、このhttp://127.0.0.1:8000/carbike/ こそが carbikeというwebアプリケーションのトップページなわけです。(アプリフォルダ名としてははcar_motorbikeです。一緒にすればよかったか・・・(´・ω・))
おさらいすると、mayproject/urls.py  が http://127.0.0.1:8000/carbike/ というurl のインプットによって  car_motorbike/views.py を参照した形になります。

次回

今後はこのページを改造していってインタラクティブな機能を強化していきます。
Web Application: 第9回 Djangoでページのルーティング設定をする
The following two tabs change content below.

Kazu Manabu

こんにちは すうがく を こよなくあいする ”二代目 圧倒的 かず まなぶ (´・ω・`)” です 心が豊かになる方法について 引き続き考えていきたいです。

投稿者: Kazu Manabu

こんにちは すうがく を こよなくあいする ”二代目 圧倒的 かず まなぶ (´・ω・`)” です 心が豊かになる方法について 引き続き考えていきたいです。