茨城エンジニアのPython開発日記

茨城のITベンチャー企業ではたらく2年目エンジニア。Pythonで色々なものを作成中。

djangoでHello Worldしてみた


ブログから記事を見つけたい場合はこちら

ブログ地図 - 茨城エンジニアのPython開発日記


こんにちは松原です。
こないだ東武動物公園行ってきました。
ペリカンがものすごい絡んできた。駅前の無印が大きかった。


今日はdjangoHello Worldしてみました。
動的なサイトを作るのに便利そうなフレームワークだなあという所感。

0. 概要

djangoはこんなデータフローでユーザーに返すらしい。

Webブラウザからリクエスト送信
→Webサーバにリクエストが届く
→プロジェクトのurl.pyで、そのリクエストを処理するアプリ(サブプロジェクトみたいなもの)を指定
→アプリのurls.pyで、リクエストを処理する関数またはクラスをviews.pyの中から指定
→views.py内の関数またはクラスがサイトを構築(この際テンプレートhtmlやデータベースのモデルをもってきてうまいこと組み合わせてくれる)


ということで、今回はリクエストをアプリのviews.pyまで通します。

フォルダ構造がややこしいので、最終的にこうなるよというフォルダ構造を先にお見せしときます。これ。
f:id:tottorisnow33:20211114142400p:plain

1. 環境

condaで仮想環境作りました。バージョンはこれ。

python=3.6.0
django=2.1.7

2. プロジェクト作成

プロジェクト作成したいフォルダへ行って、コマンドプロントからこれ。

django-admin startproject hellopro

3. アプリ作成

2で作成したプロジェクトのmanage.pyがあるフォルダへ行って、コマンドプロントからこれ。

python manage.py startapp worldapp

4. urls.pyを変更

プロジェクトのurls.py→アプリのurls.py→views.pyとリクエストが流れるようにする。

4.1 プロジェクトのurls.py
これでhelloというURLを指定されたとき、worldappというアプリ(サブプロジェクトのようなもの)のurls.pyに飛ばしてくれるようになる。

from django.contrib import admin
from django.urls import path 
from django.urls import include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('hello/', include("worldapp.urls"))
]

4.2 アプリのurls.py
自分でファイルを作成する。
これでhello/worldを指定されたとき、views.pyのhellofuncからレスポンスオブジェクトを要請するようになる。

from django.urls import path
from .views import hellofunc

urlpatterns = [
    path('world/', hellofunc),
]

5. views.pyでレスポンスオブジェクト作成

ここからレスポンスオブジェクトをもらうと、urls.pyで指定されている関数。
レスポンスオブジェクトをどう作るかでサイトが決まるはず。
本来はデータベースから情報持ってきたりテンプレートのhtml使ったりするが、ここではhelloworldのみ。
ここまでで作りたいものは完成

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def hellofunc(request):
    return HttpResponse("helloworld")

6. runserverで確認

djangoにお願いするとローカルサーバーを立ててくれて、webブラウザからの様子を見せてくれる。
お願いするコマンドは、プロジェクトのmanage.pyのあるフォルダでこれ。

python manage.py runserver

Webブラウザからローカルホスト(http://127.0.0.1:8000/)を見て、さっきurls.pyで指定したURLをみるとHelloWorldが見られる。うれしい。
f:id:tottorisnow33:20211114143929p:plain


htmlとデータベースからの情報を自由に組み合わせられるなら色々作れそうですね。
ログインサイト作るのも簡単で堅牢と噂を聞いてるので、そういうのをひょいっと作るにはよさそう。

最後に、柵ごしに喧嘩するカピバラの画像をおいておきます。それでは。

f:id:tottorisnow33:20211114144945j:plain
柵ごしに喧嘩するカピバラ