Djangoビューを作成する方法

前書き

Django Developmentシリーズに従っていると、管理者権限を持つユーザーが*コメント*を追加できるDjangoアプリケーションが正常に作成されました。および*投稿*、Djangoの管理UIダッシュボード経由。 また、MySQLとDjangoのオブジェクトリレーショナルマッピングソリューション* https://www.digitalocean.com/community/tutorials/how-to-create-django-models [models] *を利用して、データの永続性を設定しました。

このチュートリアルでは、WebアプリケーションがWeb要求を適切に処理し、必要なWeb応答を返すことを可能にするDjango * views *を作成します。 Django docsで定義されているように、Web応答は、WebページのHTMLコンテンツ、リダイレクト、またはHTTPエラー(例えば + 404 +)。 ビュー関数のコードは、Pythonパスにある限り、技術的にプロジェクトのどこにでも存在できます。 ただし、これらのビュー関数が存在するファイルに名前を付けて配置するための一般的な規則がいくつかあり、これらのプラクティスに従います。

このチュートリアルの手順を完了すると、Djangoブログサイトは最近の投稿を + your-IP-or-domain / post + URLにプルします。

前提条件

このチュートリアルは、https://www.digitalocean.com/community/tutorial_series/django-development [Django Development]シリーズの一部です。 このチュートリアルの正確な技術設定を完了するには、次のことを行っておく必要があります。

ただし、既存のDjangoのセットアップがある場合は、Djangoビューを実装する方法を理解するために従うことができます。

ステップ1-ビュー関数を作成する

Ubuntuサーバーターミナル内で、まず関連するディレクトリに移動し、Python仮想環境をアクティブにする必要があります。

cd ~/my_blog_app
. env/bin/activate

仮想環境がアクティブになったので、 `+ blogsite +`ディレクトリに移動し、Pythonファイルを開いて最初のビューを作成しますhttps://www.digitalocean.com/community/tutorials/how-to-define- functions-in-python-3 [関数]。

cd ~/my_blog_app/blog/blogsite

nanoまたは任意のテキストエディターを使用して、ビューファイルを編集用に開きます。

nano views.py

ファイルを開くと、次のようなコードが表示されます。

/my_blog_app/blog/blogsite/views.py

from django.shortcuts import render

# Create your views here.

import statementは、 + render()+`関数を `+ django.shortcuts + `ライブラリ。 https://docs.djangoproject.com/en/2.0/topics/http/shortcuts/ [+ render()` function]を使用すると、テンプレートとコンテキストの両方を組み合わせて、適切な ` HttpResponse + `オブジェクト。 これを覚えておいてください、私たちが書くすべてのビューで、 `+ HttpResponse +`のインスタンス化、投入、返送を行う責任があります。

次に、ユーザーをインデックスページに表示する最初のビューを追加します。 Djangoの `+ http `ライブラリから ` HttpResponse()+`関数をインポートします。 その関数を使用して、ウェブページがリクエストされたときに表示されるテキストを渡します。

〜/ my_blog_app / blog / blogsite / views.py

from django.shortcuts import render

その後、チュートリアルの後半で作成する個々の投稿を表示する機能をもう1つ追加します。

〜/ my_blog_app / blog / blogsite / views.py

...

最終的な `+ views.py +`ファイルは次のようになります。

〜/ my_blog_app / blog / blogsite / views.py

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


def index(request):
   return HttpResponse('Hello, welcome to the index page.')

def individual_post(request):
   return HttpResponse('Hi, this is where an individual post will be.')

ファイルの編集が終了したら、必ず保存して終了してください。

現在、これらの関数が指しているURLは指定されていないため、URL構成ファイル内の `+ urlpatterns +`ブロックに追加する必要があります。 ビューを追加したら、作成したページを表示できるように、この設定ファイルを使用してURLをビューにマッピングします。

ステップ2-ビューへのURLのマッピング

Djangoは、アプリで使用する独自のURLを設計するのに比較的便利です。 これは、一般に* URLconf *または「URL構成」ファイルと呼ばれるファイルを使用して、純粋なPythonで行われます。

Webページを表示するために、Djangoは最初に使用するルート `+ URLconf `モジュールを決定する必要があり、次にhttps://www.digitalocean.com/community/tutorials/である ` urlpatterns `を探します。 Understanding-lists-in-python-3 [リストデータ構造]にはすべてのURLパターンが含まれています。 Djangoは、一致する最初のURLパターンが見つかるまで、各URLパターンを調べます。 一致が見つかると、Djangoは関連付けられたビューを見つけ、そのビュー関数はURLパターンと ` HttpRequest +`オブジェクトに関連するデータを受け取ります。 このプロセス全体のいずれかの時点で障害が発生した場合、代わりにhttps://docs.djangoproject.com/en/2.0/topics/http/urls/#error-handling[error-handling view]が表示されます。

`〜/ my_blog_app / blog / blogsite +`ディレクトリで、編集用に ` urls.py +`ファイル(別名URLconfファイル)を開きます。 ここではnanoを使用してファイルを編集します。

nano urls.py

以下に示すように、 `+ urlpatterns +`リストを使用して、このように見えるようにファイルを変更します。

〜/ my_blog_app / blog / blogsite / urls.py

from django.urls import path
from . import views


urlpatterns = [
   path('', views.index, name='index'),
   path('post/', views.individual_post, name='individual_post')
]

上記の行の追加が終了したら、ファイルを保存して閉じます。

`+ blogsite `ディレクトリのURLconfファイルを更新したら、 ` blog `ディレクトリのURLconfに含める必要があります。そうしないと、認識されません。 設定ファイルで ` ROOT_URLCONF `として設定されているため、これを行う必要があります。 これは、Djangoが ` urlpatterns `の ` blog +`ディレクトリのURLconfを見ていることを意味します。

+ blog + URLconfに + blog site URLconfを含めるには、そのディレクトリに移動する必要があります。

cd ~/my_blog_app/blog/blog

そこに来たら、nanoまたは選択した別のテキストエディターでURLconfファイルを開くことができます。

nano urls.py

このファイル内に、次の行を追加して、作業したばかりの `+ / blogsite / urls.py +`ファイルを含めます。これは2行目に示されています。

〜/ my_blog_app / blog / blog / urls.py

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

urlpatterns = [
   path('admin/', admin.site.urls),
   path('', include('blogsite.urls'))
]

ファイルを保存して閉じます。

次に、作成したURLに移動して、ビューに追加したテキストが表示されていることを確認するために、Webブラウザーを開きます。 Djangoアプリを提供する `+ manage.py +`ファイルにアクセスするには、親ディレクトリに移動する必要があります。

cd ..

以下のIPアドレスを置き換えて、次のコマンドを発行します。

python manage.py runserver :8000

Webブラウザー内で、次のURLに移動します。

:8000

次のようなWebページが表示されます。

image:https://assets.digitalocean.com/articles/eng_python/django/django-initial-index.png [Django Initial Index Page]

次に、次のURLに移動します。

:8000/post/

ここから、次が表示されるはずです。

image:https://assets.digitalocean.com/articles/eng_python/django/django-initial-post.png [Django Initial Post Page]

これで、2つの `+ urls.py +`ファイルが機能することを確認しました。データは、予想どおりの結果を示しています。 これで、実際のデータをブログに追加してみましょう。

ステップ3-ブログ投稿を作成する

URLのパターンとビューの基本を理解したら、次はブログ投稿を追加して、Pythonファイルにハードコーディングしたテキストの代わりにウェブページに表示するようにします。

作成した管理ページから投稿を作成します。 サーバーがDjangoアプリを提供している状態で、Webブラウザーを使用して次の管理者の `+ Blogsite +`ページに移動します。

:8000/admin/blogsite/

インターフェースで、「+ Post S」行にある「++ Add」リンクをクリックして、サンプルのブログ投稿をデータベースに追加し始めます。

image:https://assets.digitalocean.com/articles/eng_python/django/django-blogsite-administration.png [Django Blogsite Admin Page]

リンクをクリックすると、次のような入力フォームが表示されます。

image:https://assets.digitalocean.com/articles/eng_python/django/django-add-post.png [Django Add Post Form]

投稿を追加するときはいつでも、このページにアクセスして追加します。 または、 `+ Change`リンクで投稿を編集できます。

フォームには、次のフィールドが表示されます。

Field Content

Title

Add your desired blog post title here, for example My First Blog Post.

Slug

This refers to the part of a URL which identifies a valid web address element with human-readable keywords. This is generally derived from the title of the page, so in this case we can use my-first-blog-post.

Content

This is the body of your blog post. We will just be adding Hello, World! for example purposes, but this is where you can be verbose.

Author

In this field, add your relevant name or username. We will use Sammy.

テストの目的に合っていると思われるブログ投稿フォームに記入します。

image:https://assets.digitalocean.com/articles/eng_python/django/django-blog-post-data.png [Django記入済みブログ投稿フォーム]

サンプルデータをページに追加したら、「+ SAVE +」ボタンをクリックします。 次の確認ページが表示されます。

image:https://assets.digitalocean.com/articles/eng_python/django/django-successful-post.png [Django Post Submission Successful]

おめでとうございます。 最初のブログ投稿を作成しました!

次に、MySQLデータベースに追加したデータを含む行が追加されたことを確認します。

手順4-データベースデータの表示

この時点で、MySQLに移動する必要があります。そのため、 `+ CTRL + C +`を入力してターミナル経由で現在のサーバープロセスを停止し、MySQLインタープリターを開きます。

mysql -u root

MySQLプロンプトが表示されたら、 `+ blog_data +`データベースに移動します。

use blog_data;

次に、 `+ blogsite_post +`テーブルの内容を表示します。

select * from blogsite_post;

次のような出力が表示され、管理ユーザーインターフェースに追加した情報が表示されます。

Output+----+--------------------+--------------------+---------------+----------------------------+--------+
| id | title              | slug               | content       | created_on                 | author |
+----+--------------------+--------------------+---------------+----------------------------+--------+
|  1 | My First Blog Post | my-first-blog-post | Hello, World! | 2018-04-24 17:10:00.139735 | Sammy  |
+----+--------------------+--------------------+---------------+----------------------------+--------+
1 row in set (0.00 sec)

出力に示されているように、追加した投稿のデータを含む行があります。 次に、このデータを投稿の表示機能に参照しましょう。 MySQLインタープリターを終了するには、 `+ CTRL + D +`を使用します。

`+ blogsite `アプリ内の ` views.py +`ファイルの場所に移動します。

cd ~/my_blog_app/blog/blogsite

ファイルを開いて、新しいデータを含めることができます。

nano views.py

ファイルを編集して、次のように表示されるようにします。

〜/ my_blog_app / blog / blogsite

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


def index(request):
   return HttpResponse('Hello, welcome to the index page.')

def individual_post(request):
   recent_post = Post.objects.get(id__exact=1)
   return HttpResponse(recent_post.title + ': ' + recent_post.content)

上記のコードでは、追加の + import`ステートメントを + Post`に追加しました。 また、引用符で囲まれた文字列を `+ HttpResponse `から削除し、ブログ投稿のデータで置き換えました。 特定のオブジェクトのデータを参照するために、表示したいオブジェクトに関連付けられているブログ投稿IDを使用し、そのIDを「 recent_post +」という変数に格納しています。 その後、フィールドにピリオド区切り文字を追加することにより、そのオブジェクトの特定のフィールドを取得できます。

ファイルを保存して閉じたら、 `+ manage.py +`ファイルの場所に移動してDjangoアプリを実行します。

cd ~/my_blog_app/blog
python manage.py runserver :8000/post/

Webブラウザーから、次のアドレスに移動します。

:8000/post/

ここで、行った変更が表示されます。ページは次のようになり、投稿に追加したテキストが表示されます。

image:https://assets.digitalocean.com/articles/eng_python/django/django-served-blog-post.png [Django Served Blog Post]

ページの検査が終了したら、ターミナルで「+ CTRL + C +」を押して、プロセスの実行を停止します。

プログラミング環境を無効にするには、 `+ deactivate +`コマンドを入力してサーバーを終了します。

結論

このチュートリアルでは、ブログ投稿データベースからビューを作成し、URLパターンをマップし、Webページにテキストを表示しました。

次のチュートリアルでは、HTMLを使用してDjango *テンプレート*を作成することにより、実際にこれをより美的にする方法を説明します。 これまでのところ、このシリーズではDjangoモデルとDjangoビューについて説明しました。 テンプレートは、Djangoアプリケーションの基盤となる最後の重要な部分です。

Related