17
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Python + Djangoのプロジェクト作成

Djangoのプロジェクト作成とアプリケーションの追加を整理します。

※ 2020.04.29 リニューアル

projectを作成する

「mysite」というプロジェクトを作成するものとします。

$ django-admin startproject mysite
$ cd mysite

動かしてみる。

$ python manage.py runserver

http://127.0.0.1:8000にアクセスするとロケットが飛び立ちます。

Django3ではasgiで動かすこともできます

$ pip install gunicorn uvicorn
$ gunicorn -k uvicorn.workers.UvicornWorker mysite.asgi:application

first step

プロジェクト作成すると、以下のディレクトリ/ファイルが作成されています。

mysite
│  manage.py
└─mysite
        asgi.py
        settings.py
        urls.py
        wsgi.py

「settings.py」を編集していきます。

(1) Django Templateを利用するための設定

「TEMPLATES」を以下のように変更します。

settings.py
・・・
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
#        'DIRS': [],
        'DIRS': [
          os.path.join(BASE_DIR, 'templates'),
        ],

(2) STATIC FILEを使用するための設定

STATICFILES_DIRS を追加します。「STATIC_URL」の下などがといいでしょう。

settings.py
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

(3) データベースをpostgresqlに変更する場合

「DATABASES」を以下のように編集します

settings.py
・・・
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'djangodb',
        'USER': 'testuser',
        'PASSWORD': 'secret',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

(4) ディレクトリを作成する。

プロジェクトの直下にtemplates, staticを作成します。

mysite
│  manage.py
├─mysite
│  │  asgi.py
│  │  settings.py
│  │  urls.py
│  │  wsgi.py
├─static
└─templates

(5) LANGUAGE_CODEとTIME_ZONEを変更

settings.py
・・・
LANGUAGE_CODE = 'ja-JP'

TIME_ZONE = 'Asia/Tokyo'

projectにアプリを追加する

(1) projectにアプリを追加する

以下のコマンドを実行してアプリケーション(myappとします)を追加します

$ django-admin startapp myapp

以下のようなディレクトリ/ファイルになっています

mysite
│  db.sqlite3
│  manage.py
│  
├─myapp
│  │  admin.py
│  │  apps.py
│  │  models.py
│  │  tests.py
│  │  views.py
│  │  __init__.py
│  │  
│  └─migrations
│          __init__.py
│          
├─mysite
│  │  asgi.py
│  │  settings.py
│  │  urls.py
│  │  wsgi.py
│  └  __init__.py
│          
├─static
└─templates

(2) urls.pyをアプリに追加して以下のように編集します

myapp/urls.py
from django.urls import path
from . import views

app_name = 'myapp'
urlpatterns = [
    path('', views.index, name='index'),
]
├─myapp
│  │  admin.py
│  │  apps.py
│  │  models.py
│  │  tests.py
│  │  urls.py
│  │  views.py

(3) views.pyを以下のように編集します

myapp/views.py
from django.http import HttpResponse

def index(req):
  return HttpResponse('Hello World')

(4) mysite/urls.pyにmyappのpathを追加する

mysite/urls.py
from django.contrib import admin
from django.urls import path, include # includeを追加

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

(5) mysite/settings.pyにmyappを追加する

mysite/settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp', # 追加
]

確認してみましょう。「Hello World」が出力されればOKです。

$ python manage.py runserver
$ curl http://127.0.0.1:8000/myapp/
Hello World

Django Templateを使う

Django Templateを使ってHTMLを表示するアプリを作成する

(1) projectにアプリを追加する

django-admin startapp myapp2

(2) urls.pyをアプリに追加して以下のように編集します

myapp2/urls.py
from django.urls import path
from . import views

app_name = 'myapp2'
urlpatterns = [
    path('', views.index, name='index'),
]

(3) views.pyを以下のように編集します

Django templateを使う場合は、renderを使います

myapp2/views.py
from django.shortcuts import render
def index(request):
    return render(request, 'myapp2/index.html')

(4), (5)は前述と同様なので省略します。

(6) htmlを追加します。

cssファイルなどを使う場合は、{% load static %}と記述して、linkタグに{% static 'css/styles.css' %}などと記述します。

myapp2/index.html
{% load static %}
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 
    <link rel="icon" href="#">
    <link href="{% static 'css/styles.css' %}" rel="stylesheet">
    <title></title>
  </head>
  <body>
      hello djnago template
  </body>
</html>

以下のようなディレクトリ/ファイルになっています

├─static
│  ├─css
│  │      styles.css
│  └─js
└─templates
    └─myapp2
            index.html

確認してみましょう。うまくHTMLが表示されたでしょうか。

$ python manage.py runserver
$ curl http://127.0.0.1:8000/myapp2/

今回はここまで。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
17
Help us understand the problem. What are the problem?