Djangoを勉強してみる_urlを学ぶ(入門編)

Pocket

前回の続きで、Djangoについて学んでいきます。

今回はurlについて色々勉強していきます。

Djangoの勉強内容は以下の本を参考にしています。

参考

Python Django3超入門 (日本語) 単行本 – 2020/6/13 掌田 津耶乃 (著)

URL を設計する

コードは以前の記事を参考にしてください。

Djangoを勉強してみる(入門編)

Djangoを勉強してみる(入門編その2)

アプリのurls.pyを作成

前回は、プロジェクトのurls.pyを使ってWebページを表示させましたが、一般的にDjangoを利用してWebページを作成する場合、アプリケーション毎にurlの処理をさせます。

そこで、まずはhelloアプリケーションにurls.pyを作成して、そこからurlを制御するようにします。

【手順】

1.helloアプリケーションの直下に「urls.py」を作成します。

2.以下のコードを入力します。

ファイル:sample_app>hello>urls.py

コード:

from django.urls import path from . import views urlpatterns = [     path('',views.index, name='index'), ]

このコードでは、urlpatterns のリストに「 path(”,views.index, name=’index’),」を入れています。

path関数の意味は、path(アクセスするアドレス,呼び出す処理)となっています。

つまり、アクセスするアドレスが空白のため「hello/」にアクセスするとviews.pyのindex関数を呼び出すという意味になります。

最後のnameはこのpathにindexという名前を指定するという意味です。
これだけでは意味は分かりませんが、後々使うことになるのでこういうものだと思って書いておきます。

以上で、アプリケーションのurls.pyは完成です。

3.プロジェクト側のurls.pyを修正します。

ファイル:sample_app>sample_app>urls.py

コード:

from django.contrib import admin from django.urls import path,include urlpatterns = [     path('admin/', admin.site.urls),     path('hello/', include('hello.urls')), ]

「path(‘hello/’, include(‘hello.urls’)),」の部分が、先ほどのアプリケーションのurls.pyに処理を渡すコードです。

具体的に言うと、include関数を使うことによって、「hello/」というpathにアクセスしてきた時は、helloアプリケーションのurls.pyを見に行きなさいという意味になります。

以上でプロジェクトのurls.pyの設定は終わりです。

動作確認してみます。

動作確認

まずは、サーバを起動します。

python manage.py runserver

ブラウザで以下にアクセスします。

http://localhost:8000/hello

問題なく表示されました。

今は簡単な文字だけを表示しているので、次はもう少し凝ったものを作成してみます。

クエリーパラメータを使う

クエリーパラメータとは、URLの後ろについてくるパラメータのことです。

例えばamazonでDjangoをキーワード検索すると、「https://www.amazon.co.jp/s?k=django&__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&ref=nb_sb_noss_2」というURLになります。

このURLの「?」以降の文字ががクエリーパラメータです。

そのクエリーパラメータをDjangoのWebアプリで使ってみたいと思います。

以下のviews.pyのコードを使って確認してみます。

ファイル:sample_app>hello>views.py

コード:

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

def index(request):
    return HttpResponse("Hello World!!")

1.次のコードを追記します。

ファイル:sample_app>hello>views.py

コード:

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

def index(request):
    msg = request.GET['msg']
    return HttpResponse("このクエリーパラメータは" + msg + "です。")

2.サーバを起動し結果を確認します。
以下のURLを入力してアクセスします。

http://localhost:8000/hello/?msg=テスト

msgにテストという文字が入って表示されています。

今回作成したプログラムでは、「msg = request.GET[‘msg’]」を使うことによって、msgに代入された文字を取り出すようになっています。

このrequestとは「HttpRequest」というクラスのインスタンスになっています。
HttpRequestは、リクエストの情報を管理するクラスです。

リクエストとはWebブラウザからのWebサーバへアクセスした時に、サーバからブラウザへの情報をリクエストと呼びます。
ちなみにその逆もあり、そのことをレスポンスと呼びます。

そのリクエストには「GET」という属性が準備されて、中身は辞書になっています。クエリーパラメータの値もそこに入っています。

&msg=〇〇として送信された値は、GET[‘msg’]で取り出すことができます。

今のままだとクエリーパラメータが無い場合はすべてエラーになるため、どちらでも対応できるようにしてみます。

3.index関数を修正する

ファイル:sample_app>hello>views.py

コード:

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

def index(request):
    if 'msg' in request.GET:
        msg = request.GET['msg']
        result = "このクエリーパラメータは" + msg + "です。"
    else:
        result = "クエリーパラメータを入れてください。"

    return HttpResponse(result)

このコードでは、「if ‘msg’ in request.GET:」で、GETの辞書に中にmsgというキーの値があるかどうかを確認しています。

もし、キーがある場合は、msgを取り出して画面に表示しています。

無い場合は、「クエリーパラメータを入れてください。」という文字を表示されるようにしています。

以上で今回の内容は終わりです。

url.pyは絶対に利用するものなので理解を深めておく必要があります。

ありがとうございました。

 

P.S.

勉強を継続することが苦手ですか?

少し前からココナラというサービスで習慣化のテクニックについて教えるサービスを始めました。

もし、いつも3日坊主で終わってしまうという方や、ダイエットを続けたい、勉強したい、運動したいなど何か習慣化したいと思っている方がいましたら全力でサポートしますので、まずは覗いてみてください。

すでに何人かの方に実践してもらって効果が出ているという感想をいただいてます。

人生変わる?【習慣化の方法】を教えます 。ダイエット、勉強、運動を続けることが苦手ですか?

Pocket