コピペで始めるDjango Oscor

# 前書き

## 理由

ドキュメントは有るけど、ハマらないようにまとめました。

## 前提

Mac OS X / macOS

※Linux OSやWindowsの人は適宜読み替えてください。

## Django Oscarとは？

Djangoで動かせるショッピングサイトです。

## ドキュメント

https://django-oscar.readthedocs.io/en/releases-1.2/internals/getting_started.html

## インストール

### 前提

すでにDjango 1.9やPython 3がインストールされている。
`virtualenv`などで入ってるとなお良い。

オープンソースなのでgit上にあるので以下のようにやると思いますが、違います。
Django自体のプロジェクトは自分で作成してOscor自体はモジュール的に使います。

```bash:x悪い例
git clone https://github.com/django-oscar/django-oscar
```

### 1. まず本体を入れます。

```bash:良い例
pip install django-oscar
```

### 2. ドキュメントにしれっと書かれていたこれらも入れておきます。

```
pip install django_compressor
pip install pysolr
```

### django_compressorとは？

Oscorがサポートしているテンプレートエンジンです。
オプションなのでなくてもいいようですが、入れておきます。
`django-widget-tweaks`もテンプレートエンジンなのですが、`django-oscar`をpipに入れるときに勝手に入る模様・・。

### pysolrとは？

Apache Solr（ソーラー）」（以下、Solr）というオープンソースの検索エンジンで、これをPythonで動かすものです。

### 3. Solrのインストールや起動

```bash
brew install solr
```

### Solr起動の準備

Solrのログ用フォルダの作成

```bash
mkdir -p /usr/local/Cellar/solr/6.1.0/example/logs/
```

※`6.1.0`の部分は今回インストールしたものによって違うので自分の環境に合わせてください。

`solr start`で起動。以下のようなログが出ます。

```bash
$ solr start
Waiting up to 30 seconds to see Solr running on port 8983 [\]
Started Solr server on port 8983 (pid=40099). Happy searching!
```

### 4. Djangoプロジェクト作成

コマンドで生成します.`frobshop`はプロジェクト名になるのでご自身の希望で変えましょう。

```
django-admin.py startproject frobshop
```

スーパーユーザーも作っておきましょう。

```
python manage.py createsuperuser
```

### 5. settings.py設定

今回は`frobshop`プロジェクトなのでパスはご自身環境に合わせて下さい。
※「追加」のところを参照に追加してください。

※もし、コメントアウトなどで日本語を含めたいときはコレを一番上に書いてください。

```python:frobshop/frobshop/settings.py
# -*- coding: utf-8 -*-
```

一番上の方に以下を追加`location`を忘れないように！

```python:frobshop/frobshop/settings.py
import os
from oscar.defaults import * # 追加

 # 追加
location = lambda x: os.path.join(
    os.path.dirname(os.path.realpath(__file__)), x)
```

アプリケーション系の設定
`SITE_ID = 1`を忘れるとあとでadminに入れなくなるので忘れ得ないように

```python:frobshop/frobshop/settings.py
from oscar import get_core_apps # 追加

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites', # 追加
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.flatpages',
    'compressor', # 追加
    'widget_tweaks', # 追加
] + get_core_apps() # 追加


SITE_ID = 1 # 追加

MIDDLEWARE_CLASSES = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',

    'oscar.apps.basket.middleware.BasketMiddleware', # 追加
    'django.contrib.flatpages.middleware.FlatpageFallbackMiddleware', # 追加
]
```

テンプレート系

```python:frobshop/frobshop/settings.py
from oscar import OSCAR_MAIN_TEMPLATE_DIR # 追加

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [ # 追加
            os.path.join(BASE_DIR, 'templates'),
            OSCAR_MAIN_TEMPLATE_DIR
        ],
        'APP_DIRS': True,
        'OPTIONS': {
```

`DATABASES`の項目の下の方に以下をまるごと追加

```python:frobshop/frobshop/settings.py
# 追加
HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
        'URL': 'http://127.0.0.1:8983/solr',
        'INCLUDE_SPELLING': True,
    },
}
```

一番下の方に`STATIC_URL`と`STATIC_ROOT`を。

```python:frobshop/frobshop/settings.py
STATIC_URL = '/static/'

# 追加
STATIC_URL = '/static/'
STATIC_ROOT = location('public/static')
```

### 6. urls.py設定

※もし、コメントアウトなどで日本語を含めたいときはコレを一番上に書いてください。

```python:frobshop/frobshop/urls.py
# -*- coding: utf-8 -*-
```

`include`を追加します。`url`はデフォルトで入ってます。

```python:frobshop/frobshop/urls.py
from django.conf.urls import include, url # 追加
```

```
urlpatterns = [
    url(r'^i18n/', include('django.conf.urls.i18n')), # 追加
    url(r'^admin/', admin.site.urls),

    url(r'', include(application.urls)), # 追加
]
```

## 6. マイグレーションです。

```bash
python manage.py migrate
```

## 7. 起動

```bash
python manage.py runserver
```

`http://localhost:8000/`にアクセスしましょう。

管理画面は`http://localhost:8000/admin`ですが、
エラーが出るときは`SITE_ID = 1`を忘れてますね。

何か質問があれば、書き込めば答えれるかもしれませんね。