nprogram’s blog

気ままに、プログラミングのトピックについて書いていきます

Django学習 (トラブルシューティング)

はじめに

DjangoのWebアプリケーション作成時につまったところを記載します。

開発環境

  • Windows 10 (version 1809)
  • Python version : 3.7.1
  • Django version : (2, 1, 7, 'final', 0)
  • IDE : Visual Studio Code

ディレクトリ構成

プロジェクトの中に一つのアプリケーションがある場合のディレクトリ構成を以下に記載します。

  • プロジェクト名 : project
  • アプリケーション名 : myapp
project
├── myapp
│ ├── migrations
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── model.py
│ ├── tests.py
│ └── views.py
│
├── project
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
│
├── db.sqlite3
└── manage.py

Djangoでmodel.pyを書き換える場合の注意点

model.pyを変更した場合は、以下の2つのコマンドを忘れずに実施してください。実施しないとmodel.pyの変更が反映されません。(´;ω;`)

  1. Jangoフレームワークにモデルを作成したり、変更したことを伝えるコマンド

py manage.py makemigrations [アプリ名]

  1. 上記を実際に反映させるコマンドもさらに必要

py manage.py migrate

関数仕様を調べたい

Djangoでサーバーを起動しようとしたときにエラーが発生する

サーバーを起動するコマンドを入力したとき(py manage.py runserver)

以下のように、エラーが発生する場合があります。 エラーを見るときは、後ろから見ます。後ろから新しいエラーがあるためです。

すると、最後のエラーを見ると、employee.appsがパッケージにないようです・・・。

ModuleNotFoundError: No module named 'employee.apps.EmployeeConfigdjango'; 'employee.apps' is not a package

C:\Users\uv2ut\PycharmProjects\project2>py manage.py runserver
Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x000002158F8B7840>
Traceback (most recent call last):
  File "C:\Users\uv2ut\AppData\Local\Programs\Python\Python37\lib\site-packages\django\utils\autoreload.py", line 225, in wrapper
    fn(*args, **kwargs)
  File "C:\Users\uv2ut\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\management\commands\runserver.py", line 109, in inner_run
    autoreload.raise_last_exception()
  File "C:\Users\uv2ut\AppData\Local\Programs\Python\Python37\lib\site-packages\django\utils\autoreload.py", line 248, in raise_last_exception
    raise _exception[1]
  File "C:\Users\uv2ut\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\management\__init__.py", line 337, in execute
    autoreload.check_errors(django.setup)()
  File "C:\Users\uv2ut\AppData\Local\Programs\Python\Python37\lib\site-packages\django\utils\autoreload.py", line 225, in wrapper
    fn(*args, **kwargs)
  File "C:\Users\uv2ut\AppData\Local\Programs\Python\Python37\lib\site-packages\django\__init__.py", line 24, in setup
    apps.populate(settings.INSTALLED_APPS)
  File "C:\Users\uv2ut\AppData\Local\Programs\Python\Python37\lib\site-packages\django\apps\registry.py", line 89, in populate
    app_config = AppConfig.create(entry)
  File "C:\Users\uv2ut\AppData\Local\Programs\Python\Python37\lib\site-packages\django\apps\config.py", line 116, in create
    mod = import_module(mod_path)
  File "C:\Users\uv2ut\AppData\Local\Programs\Python\Python37\lib\importlib\__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 962, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'employee.apps.EmployeeConfigdjango'; 'employee.apps' is not a package

原因は、settings.pyにおいて、'employee.apps.EmployeeConfig'の後にカンマがないことでした。(-_-)

INSTALLED_APPS = [
    'employee.apps.EmployeeConfig'
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]