はじめに
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の変更が反映されません。(´;ω;`)
- Jangoフレームワークにモデルを作成したり、変更したことを伝えるコマンド
py manage.py makemigrations [アプリ名]
- 上記を実際に反映させるコマンドもさらに必要
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',
]