13
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2018-06-25

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/

今回はここまで。

13
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?