PyCharm 2018.2ヘルプ

ステップ 4.最初のDjangoプロジェクトの作成と実行

始める前に

次の前提条件が満たされていることを確認してください。

  • PyCharmバージョン2016.1以降で作業しています。それでもPyCharmがない場合は、このページ(英語)からダウンロードしてください。 PyCharmをインストールするには、プラットフォームに応じて指示に従ってください。
  • 少なくとも1つのPythonインタープリタがあなたのコンピュータに適切にインストールされている必要があります。インタープリターはこのページ(英語)からダウンロードできます。
  • Djangoパッケージがインストールされています。 PyCharm UIを使用してパッケージをインストールする方法については、パッケージのインストール、アンインストール、およびアップグレードを参照してください。 Djangoのインストール方法(英語)ページの説明に従って、Djangoをインストールすることもできます。

このチュートリアルは、次の前提で作成されています。

  • Python 3.4.1。
  • Django 1.10.0以上。
  • このチュートリアルで使用されている例は、Djangoドキュメント(英語)で使用されているものに似ています。サンプルプロジェクトはここ(英語)からダウンロードできます。

新しいプロジェクトを作成する

実際、新しいプロジェクトはすべて同じ方法で作成されます: ようこそ画面のクイックスタートエリアで新規プロジェクトの作成ボタンをクリックしてください:

py welcomeScreen

すでに開いているプロジェクトがある場合は、メインメニューでファイル|新しいプロジェクト...を選択して新しいプロジェクトを作成します。

次に、目的のプロジェクトタイプ(ここではDjango)を選択します。プロジェクト名と場所を指定します。

Pythonのベストプラクティスは、各プロジェクトのvirtualenvを作成することです。これを行うには、プロジェクト・インタープリター: 新規 Virtualenv 環境ノードを展開し、新しい仮想環境の作成に使用するツールを選択します。 Virtualenvツールを選択し、新しい仮想環境に使用する場所とベースインタープリタを指定しましょう。必要に応じて、以下の2つのチェックボックスを選択します。

次に、詳細設定ノードを展開し、Django関連の設定を指定します。 アプリケーション名フィールドには、アプリケーション名(ここでは世論調査)を指定します。

py choose project type

作成をクリックします - Djangoプロジェクトが準備完了です。

プロジェクトの構造を探る

前述したように、基本的にスタブプロジェクトは準備ができています。フレームワーク固有のファイルとディレクトリが含まれています。 PyramidやGoogle App Engineなど、サポートされているタイプのプロジェクトを作成しても同じことが起こります。

新しいプロジェクトの構造がプロジェクトツールウィンドウでどのように見えるかを見てみましょう。

プロジェクトツールウィンドウのプロジェクトビュー

このビューは、デフォルトで表示されます。これはDjango固有のプロジェクト構造を示しています: pollsmysite ディレクトリ;また、 manage.py および settings.py ファイルが表示されます。

このビューでは、 .idea ディレクトリは表示されません。

py project view

プロジェクトツールウィンドウのプロジェクトファイルビュー

何らかの理由で .idea ディレクトリの内容を表示したい場合は、プロジェクト・ファイルビューを選択してください: ご覧のとおり、このビューはプロジェクトのルートの下にあるため、同じディレクトリとファイルと .idea ディレクトリを表示します。

py project files view

プロジェクトビューに戻りましょう。

プロジェクトビューでは何が表示されますか?

  • mysite ディレクトリはプロジェクトのコンテナです。プロジェクトビューでは太字で表示されます。
  • manage.py:Djangoプロジェクトと対話できるコマンドラインユーティリティです。詳細は、Djangoドキュメント(英語)を参照してください。
  • ネストされたディレクトリ mysite は、プロジェクトの実際のPythonパッケージです。
  • mysite/__init__.py:この空のファイルはPythonに、このディレクトリをPythonパッケージと見なすべきであることを伝えます。
  • mysite/settings.py:このファイルにはDjangoプロジェクトの設定(英語)が含まれています。
  • mysite/urls.py:このファイルにはDjangoプロジェクトのURL宣言(英語)が含まれています。
  • mysite/wsgi.py:このファイルは、プロジェクトに対応するWSGI互換Webサーバーのエントリポイントを定義します。詳細はWSGIを使用して展開する方法(英語)を参照してください。
  • ネストされたディレクトリ polls には、Djangoアプリケーションの開発に必要なすべてのファイルが含まれています(この時点では、これらのファイルは空です)。
    • ここでも、 polls/_init_.py はPythonに、このディレクトリをPythonパッケージとみなすべきだと伝えます。
    • polls/models.py:このファイルでは、アプリケーションのためにモデルを作成するを使用します。
    • polls/views.py:このファイルでは、ビューの作成を実行します。
  • templates ディレクトリは空になりました。テンプレートファイルが含まれている必要があります。
  • ネストされたディレクトリ migrations にはパッケージファイル _init_.pyのみが含まれていますが、将来、モデルに加えた変更(フィールドの追加、モデルの削除など)をデータベーススキーマに伝播するために使用されます。移行の説明ここ(英語)を読んでください。

必要に応じて、いくつでもDjangoアプリケーションを作成できます。アプリケーションをプロジェクトに追加するには、 manage.py ユーティリティの startapp タスク(ツール| manage.pyタスクを実行する、コンソールに startapp と入力)を実行します。

データベースの設定

さて、プロジェクトスタブが準備完了したら、微調整をしましょう。 settings.pyを編集するために開きます。これを行うには、プロジェクトツールウィンドウでファイルを選択し、 F4を押します。このファイルは、エディタの独自のタブで開きます。

アプリケーションで使用するデータベースを指定します。この目的のために、 DATABASES 変数を探します: Ctrl+Fをクリックし、検索フィールドにあなたが探している文字列を入力し始めます。次に、 'ENGINE' 行に、ドットの後にデータベース管理システムの名前を追加します(コメントの後に指定したものを使用できますが、始めは sqlite3で始まります)。

'NAME' 行には、まだ存在しない場合でも、目的のデータベースの名前を入力します。

py db config

Djangoサーバーの起動

慎重に sqlite3を選択したので、他の値(ユーザ証明書、ポート、ホスト)を定義する必要はありません。設定が正しいかどうかを確認しましょう。 manage.py ユーティリティの runserver タスクを起動するだけです: Ctrl+Alt+Rを押し、 manage.py コンソールにタスク名を入力してください:

py runserver

推奨リンクをたどり、次のページを参照してください:

py runserver result

モデルの作成

次に、ファイル models.pyを編集するために開いて、import文が既にそこにあることに注意してください。次に、次のコードを入力します。

from django.db import models # the following lines added: import datetime from django.utils import timezone class Question(models.Model): question_text = models.CharField(max_length=200) pub_date = models.DateTimeField('date published') def __str__(self): return self.question_text def was_published_recently(self): now = timezone.now() return now - datetime.timedelta(days=1) <= self.pub_date <= now was_published_recently.admin_order_field = 'pub_date' was_published_recently.boolean = True was_published_recently.short_description = 'Published recently?' class Choice(models.Model): question = models.ForeignKey(Question, on_delete=models.DO_NOTHING,) choice_text = models.CharField(max_length=200) votes = models.IntegerField(default=0) def __str__(self): return self.choice_text

実際には、コピー・ペーストできますが、入力はお勧めです - 強力なPyCharmのコード補完が実際に動作するのを見るのに役立ちます:

py completion

データベースの作成

新しいモデルのテーブルを作成する必要があります。この目的のために、 manage.py コンソールを起動するための魔法の Ctrl+Alt+R ショートカットを使用します。最初に実行するコマンドは makemigrations pollsです。

py makemigration

つまり、Djangoに2つの新しいモデル ChoiceQuestionが作成され、移行が作成されたことを伝えました。

py makemigration1

次に、プロンプトの後に次のコマンドを入力します。

sqlmigrate polls 0001
py sqlmigrate

最後に、 migrate コマンドを実行して、実際にデータベースにこれらのテーブルを作成します。

py migrate

管理機能の実行

まず、スーパーユーザーを作成します: これを行うには、 manage.py コンソールに createsuperuser コマンドを入力し、電子メールアドレスとパスワードを指定します:

py superuser

サイト管理を有効にすることを決めたので、PyCharmは既にファイル urls.pyの対応する行のコメントを外しています。

編集のために polls ディレクトリの admin.py ファイルを開き、既に存在する次のコードを参照してください:

from django.contrib import admin

ただし、管理サイトの編集機能を有効にする必要があります。

実行/デバッグ構成の準備

これで管理者ページに移動する準備が整いました。確かに、Djangoサーバーを実行し、ブラウザにアクセスし、アドレスバーにURL全体を入力することは可能ですが、PyCharmを使用すると簡単な方法があります。あらかじめ設定されたDjangoサーバーの実行構成を少し変更して使用します。

この実行/デバッグ設定を編集用に開くには、メインツールバーの実行/デバッグ設定セレクタをクリックし、構成の編集を選択します(またはメインメニューで実行 | 構成の編集を選択します)。

py edit runconfig

「Run / Dug Configuration」ダイアログボックスでは、この実行/デバッグ設定に名前(ここでは mysite)を与え、デフォルトブラウザでアプリケーションを実行できるようにします(チェックボックスブラウザーの実行を選択します): デフォルトで開かれるサイトのページを指定します http://127.0.0.1:8000/admin/):

py runconfig

管理サイトの起動

アプリケーションを起動するには、 Shift+F10を押すか、メインツールバーの icons toolwindows toolWindowRun svg をクリックして、標準のDjangoサイトログインページを開きます。

py login page

ログインすると、管理ページが表示されます。 認証と承認(グループとユーザー)セクションがありますが、ポーリングは使用できません。なぜそうなのか?

adminに質問オブジェクトには管理インターフェースがあることを伝えなければなりません。これを行うには、 polls/admin.py ファイルを編集用に開き(プロジェクトビューで F4を選択して)、次のコードを入力します。

from django.contrib import admin from .models import Question #this line added admin.site.register(Question)#this line added

もう一度コード補完に注意してください:

py completion1

ページを更新し、質問が表示されたポーリングセクションが表示されていることを確認します。

py site admin page

いくつかの質問を作成するには、追加をクリックします。

admin.pyの編集

しかし、それぞれの質問にはいくつかの選択肢がありますが、選択肢はまだありません。再度、ファイル polls/admin.py を編集するために開き、次のように変更します。

from django.contrib import admin from .models import Choice, Question class ChoiceInline(admin.TabularInline): model = Choice extra = 3 class QuestionAdmin(admin.ModelAdmin): fieldsets = [ (None, {'fields': ['question_text']}), ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}), ] inlines = [ChoiceInline] admin.site.register(Question, QuestionAdmin)

今すぐ質問を変更するページを見てください:

py change question

ビューの作成

polls/views.py ファイルを編集用に開き、次のPythonコードを入力します。

from django.http import HttpResponse def index(request): return HttpResponse("Hello, world. You're at the polls index.")

次に、 urls.py という名前の新しいファイルを polls ディレクトリに追加し、次のコードを入力します。

from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index, name='index'), ]

次に、ファイル mysite/urls.py (PyCharmがすでに作成している)を編集し、インデックスページのURLを追加します: あなたは次のコードで終わるべきです:

from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r'^polls/', include('polls.urls')), #this line added url(r'^admin/', admin.site.urls), ]

今、ページ 127.0.0.1:8000/polls/ を開いて楽しんでください:

py result1

次に、より多くのビューを追加しましょう。再度、 polls/views.pyファイルに次のコードを追加します。

def detail(request, question_id): return HttpResponse("You're looking at question %s." % question_id) def results(request, question_id): response = "You're looking at the results of question %s." return HttpResponse(response % question_id) def vote(request, question_id): return HttpResponse("You're voting on question %s." % question_id)

次の url() 呼び出しを追加して、これらの新しいビューを polls.urls モジュールに配線します。

from django.conf.urls import url from . import views urlpatterns = [ url(r'^$', views.index, name='index'), # ex: /polls/5/ url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'), # ex: /polls/5/results/ url(r'^(?P<question_id>[0-9]+)/results/$', views.results, name='results'), # ex: /polls/5/vote/ url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'), ]

ブラウザで対応するページを開くと、次のように表示されます。

py result2

Djangoテンプレートの作成

ご覧のとおり、これらのページのデザインはビューにハードコードされています。したがって、読みやすくするために、対応するPythonコードを編集する必要があります。次に、Pythonからの出力の視覚的表現を分離しましょう。そうするために、テンプレートを作成しましょう。

ファイル polls/views.py を編集するために開き、その内容を次のコードに置き換えます。

from django.http import HttpResponse, HttpResponseRedirect from django.shortcuts import get_object_or_404, render from django.urls import reverse from .models import Question, Choice def index(request): latest_question_list = Question.objects.order_by('-pub_date')[:5] context = {'latest_question_list': latest_question_list} return render(request, 'polls/index.html', context) def detail(request, question_id): question = get_object_or_404(Question, pk=question_id) return render(request, 'polls/detail.html', {'question': question}) def results(request, question_id): question = get_object_or_404(Question, pk=question_id) return render(request, 'polls/results.html', {'question': question}) def vote(request, question_id): question = get_object_or_404(Question, pk=question_id) try: selected_choice = question.choice_set.get(pk=request.POST['choice']) except (KeyError, Choice.DoesNotExist): return render(request, 'polls/detail.html', { 'question': question, 'error_message': "You didn't select a choice.", }) else: selected_choice.votes += 1 selected_choice.save() return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))

ところで、インポート・ステートメントの作成に役立つインポート・アシスタントに注意してください。

最初に気付くのは、 index.htmlページへの未解決の参照です。

py template1

PyCharmはクイック・フィックスを示唆: 電球をクリックするか、 Alt+Enterを押すと、対応するテンプレートファイルがテンプレートフォルダに作成されます(PyCharmはこのテンプレートが存在するディレクトリ polls も作成します)。

py template2

これまでのところ、ファイル index.html は空です。次のコードを追加します。

{% load staticfiles %} <link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}" /> {% if latest_question_list %} <ul> {% for question in latest_question_list %} <li><a href="{% url 'detail' question.id %}">{{ question.question_text }}</a></li> {% endfor %} </ul> {% else %} <p>No polls are available.</p> {% endif %}

テンプレートファイルのコード補完に注意してください!例:オープニング {%を入力すると、PyCharmは対応する閉じる %} を自動的に追加し、キャレットを将来の入力の場所に配置します。 HTML タグでは、コード補完も利用可能です。

ファイル views.pyindex.html の左のガターにそれぞれ表示されるアイコン icons fileTypes html svgpythonScript に注意してください。

py template3

これらのアイコンを使用すると、ビューメソッドとそのテンプレートをすぐにジャンプすることができます。記事テンプレートとビューの間を移動する第6回Django固有のナビゲーションのこの種のナビゲーションの詳細については、こちらをご覧ください。

スタイルシートの使用

ビューファイル index.htmlに見られるように、スタイルシートへの参照があり、未解決です:

この参照を次のように解決します。

  1. ディレクトリを作成します。これを行うには、ProjectビューでPythonパッケージ pollsを選択し、 Alt+Insertを押します。

    表示されるポップアップメニューでディレクトリーを選択し、ディレクトリ構造 static/pollsの名前を指定します。

  2. 次に、このディレクトリにスタイルシートを作成します。これを行うには、一番内側のディレクトリ pollsを選択し、 Alt+Insertを押して、オプションスタイルシートを選択し、開くダイアログボックスにスタイルを入力します。
  3. 好みに応じて、作成されたスタイルシートにいくつかのコンテンツを提供します。例:緑色の質問の箇条書きリストが表示されます。
    li a { color: green; }

ここにいる!

次に、利用可能な投票のリストを確認しましょう。管理サイトは既に稼働しています。ポーリングのリスト(インデックスページ)を含むページにアクセスする最も簡単な方法はURLを指定することです: /admin/の代わりにブラウザのアドレスバーに /polls/と入力してください:

py result3

試して…

PyCharmがアプリケーションのテストを簡素化する方法を見てみましょう。

polls ディレクトリにすでにファイル tests.py があります。今は、このファイルは空です。もちろん、この特定のファイルに新しいテストを配置することをお勧めします。例:私たちのアンケートが空でないことを確認したいのですが:

import datetime from django.urls import reverse from django.test import TestCase from django.utils import timezone from .models import Question def create_question(question_text, days): time = timezone.now() + datetime.timedelta(days=days) return Question.objects.create(question_text=question_text, pub_date=time) class QuestionViewTests(TestCase): def test_index_view_with_no_questions(self): """ If no questions exist, an appropriate message should be displayed. """ response = self.client.get(reverse('index')) self.assertEqual(response.status_code, 200) self.assertContains(response, "No polls are available.") self.assertQuerysetEqual(response.context['latest_question_list'], [])

このテストを実行するには、エディタでファイル tests.py の背景を右クリックし、オプション実行を選択するか、 Ctrl+Shift+F10を押します。 PyCharmはUnitTest(デフォルト・テスト・ランナーとして定義されています)またはDjangoテストの2つのオプションを提案しています。

テスト結果は、[Run]ツールウィンドウの[テスト・ランナー]タブに表示されます。

py test run2

要約

この簡単なチュートリアルは終了しました。簡単にDjangoアプリケーションを作成して起動しました。 PyCharmの助けを借りて何をしてきたのかを繰り返しましょう。

  • Djangoプロジェクトとアプリケーションが作成されました
  • Djangoサーバーが開始
  • データベースが構成されている
  • 作成されたモデル、ビュー、テンプレート
  • アプリケーションが起動しました
  • 作成され実行されたテスト
最終変更日: 2018年9月17日