PyCharm 2020.2ヘルプ

ステップ 4. 最初のDjangoプロジェクトを作成して実行する

始める前に

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

  • PyCharmバージョン2016.1以降を使用しています。それでもPyCharmをお持ちでない場合は、このページからダウンロードしてください。PyCharmをインストールするには、プラットフォームに応じて、指示に従います。

  • 少なくとも1つのPythonインタープリターがコンピューターに正しくインストールされています。このページ(英語)からインタープリターをダウンロードできます。

  • Djangoパッケージがインストールされています。PyCharm UIを使用してパッケージをインストールする方法については、パッケージのインストール、アンインストール、およびアップグレードを参照してください。Djangoのインストール方法(英語)ページの説明に従って、Djangoをインストールすることもできます。

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

  • Python 3.4.1.

  • Django 1.x(Django 1.10 より後)

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

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

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

Welcome screen

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

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

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

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

selecting a project type

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

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

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

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

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

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

このビューでは.ideaディレクトリを表示できないことに注意してください。

Project view

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

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

Project files

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

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

  • 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を使用してデプロイする方法(英語)を参照してください。

  • ネストされたディレクトリポーリングには、Djangoアプリケーションの開発に必要なすべてのファイルが含まれています(現時点では、これらのファイルは空です)。

    • この場合も、polls / _init_.pyはPythonに、このディレクトリをPythonパッケージと見なす必要があることを伝えます。

    • polls / models.py : このファイルでは、アプリケーションのモデル作成します。

    • polls / views.py : このファイルでは、ビュー作成します

  • テンプレートディレクトリは空です。テンプレートファイルが含まれている必要があります。

  • ネストされたディレクトリの移行には、現時点ではパッケージファイル_init_.pyのみが含まれていますが、将来的には、モデルに加えた変更(フィールドの追加、モデルの削除など)をデータベーススキーマに反映するために使用されます。こちらのマイグレーションの説明をお読みください。

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

データベースの設定

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

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

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

Define database

Djangoサーバーの起動

sqlite3を慎重に選択したため、他の値(ユーザーの資格情報、ポート、ホスト)を定義する必要はありません。次に、設定が正しいかどうかを確認します。これは最も簡単に実行できます。manage.pyユーティリティの runserver タスクを起動するだけです。Ctrl+Alt+Rを押して、manage.pyコンソールにタスク名を入力します。

Running manage.py in the console

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

Preview the page

モデルの作成

次に、ファイル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のコード補完が実際に動作していることを確認できます。

Using code competion

データベースの作成

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

executing makemigrations

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

migration

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

sqlmigrate polls 0001
executing sqlmigrate pools 0001

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

creating tables in the database

管理機能の実行

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

creating a superuser

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

pollsディレクトリのadmin.pyファイルを編集用に開き、すでに存在する次のコードを確認します。

from django.contrib import admin

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

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

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

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

Editing Run/Debug configuration

実行/デバッグ構成ダイアログで、この実行/デバッグ構成に名前を付け(ここでは mysiteです)、デフォルトのブラウザーでアプリケーションを実行できるようにし(チェックボックスブラウザーの実行を選択)、デフォルトで開くサイトのページを指定します(ここにこのページがあります) http://127.0.0.1:8000/admin/):

setting the default web page

管理サイトの起動

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

login page

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

Question オブジェクトには管理インターフェースがあることを管理者に伝える必要があります。そのためには、polls / admin.pyファイルを開いて編集し(プロジェクトビューで選択して F4を押す)、次のコードを入力します。

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

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

code completion

ページをリフレッシュし、質問が表示された投票セクションが表示されていることを確認します。

site administration 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)

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

Change question page

ビューの作成

ファイル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/ページを開いて楽しみましょう:

start page

次に、ビューを追加します。もう一度、次のコードを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'), ]

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

application pages

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ページへの未解決の参照です。

view.py code

PyCharmはクイックフィックスを提案します。電球をクリックするか Alt+Enterを押すと、対応するテンプレートファイルがテンプレートフォルダーに作成されます(PyCharmはこのテンプレートが常駐するディレクトリpollsも作成することに注意してください):

creating a template

現在、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は対応する1つの終了 %} を自動的に追加し、将来の入力の位置にキャレットを配置します。HTMLタグでは、コード補完も使用できます。

アイコン html typepython typeファイルviews.pyおよびindex.htmlのガターにそれぞれ表示されます。

viewing html and python code

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

スタイルシートの使用

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

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

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

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

  2. 次に、このディレクトリにスタイルシートを作成します。これを行うには、最も内側のディレクトリpollsを選択し、Alt+Insertを押して、オプションスタイルシートを選択し、開いたダイアログにスタイルを入力します。

  3. 好みに応じて、作成したスタイルシートにコンテンツを提供します。例:緑の色の付いた質問の箇条書きリストを表示したい:

    li a { color: green; }

さあ着いた!

次に、利用可能な投票のリストを確認します。私たちの管理サイトはすでに実行されており、投票のリストを含むページ(インデックスページ)にアクセスする最も簡単な方法は、そのURLを指定することです。ブラウザのアドレスバーに/admin/ではなく/polls/と入力します。

polls

テスト…

次に、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つのオプションを提案しています。

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

running tests

要約

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

  • Djangoプロジェクトとアプリケーションが作成されました

  • Djangoサーバーが開始

  • データベースが構成されている

  • 作成されたモデル、ビュー、テンプレート

  • アプリケーションが起動しました

  • 作成され実行されたテスト

最終更新日: 2020年6月23日

関連ページ:

パッケージのインストール、アンインストール、およびアップグレード

PyCharmは、特定のPythonインタープリターのPythonパッケージをインストール、アンインストール、およびアップグレードする方法を提供します。デフォルトでは、PyCharmはpipを使用してプロジェクトパッケージを管理します。Conda環境では、condaパッケージマネージャーを使用できま...

ようこそ画面

PyCharmは、プロジェクトが開かれていないときにようこそ画面を表示します。例:PyCharmを初めて実行したとき、または開いているプロジェクトの唯一のインスタンスを閉じたとき。この画面から、新しいプロジェクトを作成したり、PyCharm Eduで学習パスを開始したり、既存のプロジェクトをバージョ...

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

表示 | ツール・ウィンドウ | プロジェクトこのツールウィンドウを使用すると、プロジェクトをさまざまな観点から見て、新しい項目(ディレクトリ、ファイル、クラスなど)の作成、エディターでのファイルの開き、目的のコードフラグメントへの移動などのタスクを実行できます。このツールウィンドウのほとんどの機能...

実行/デバッグ構成: Django サーバー

このダイアログを使用して、Django サーバーの実行/デバッグ構成を作成します。本セクション:構成タブ:ホストこのテキストボックスに、使用するホスト名を指定します。ポートこのテキストボックスに、サーバーを起動するポート番号を指定します。追加オプションIn this text box, specif...

インテンション・アクション

エディターで作業するときに、PyCharmはコードを分析し、コードを最適化する方法を検索し、潜在的な問題と実際の問題を検出します。As soon as the IDE finds a way to alter your code, it displays a yellow bulb iconin t...

コード補完

このセクションでは、コーディングプロセスのスピードアップを可能にするコンテキスト対応コード補完のさまざまなテクニックについて説明します。基本補完:基本コード補完は、可視性スコープ内のクラス、メソッド、およびキーワードの名前を完成させるのに役立ちます。コード補完を呼び出すと、PyCharmはコンテキス...