PythonAnywhere上でDjangoを実行する

# 各バージョン

- Python: 3.4.0
- Django: 1.8.2

# python3用のvirtualenvを作成

terminalを開きます。

![スクリーンショット 2015-06-28 17.16.36.png](https://qiita-image-store.s3.amazonaws.com/0/36261/513279c1-971a-d5b8-f8f2-8c9cf0087379.png)

terminarl上でvritualenvを作成します。

```
08:20 ~ $ virtualenv --python="python3" env                                                                                          
Running virtualenv with interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in env/bin/python3
Also creating executable in env/bin/python
Installing setuptools, pip, wheel...done.
08:21 ~ $ 

```

virtualenvをactivateします。

```
08:21 ~ $ source env/bin/activate                                                                                                    
(env)08:21 ~ $ 
```

# djangoをinstall 

`pip install django` でdjangoをinstallします。

```
(env)08:21 ~ $ pip install django 
Collecting django
Installing collected packages: django
Successfully installed django-1.8.2
```

# projectを作る

`python manage.py startproject PROJECTNAME` でprojectを作成します。


```
(env)08:27 ~ $ django-admin startproject djexample
(env)08:27 ~ $ 
```

# syncdbする

作成したprojectのディレクトリに移動します。

```
(env)08:34 ~ $ cd djexample/
```

とりあえずsyncdbします。

```
(env)08:35 ~/djexample $ python manage.py syncdb
/home/TakesxiSximada/env/lib/python3.4/site-packages/django/core/management/commands/syncdb.py:24: RemovedInDjango19Warning: The sync
db command will be removed in Django 1.9
  warnings.warn("The syncdb command will be removed in Django 1.9", RemovedInDjango19Warning)
Operations to perform:
  Synchronize unmigrated apps: staticfiles, messages
  Apply all migrations: auth, admin, contenttypes, sessions
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
Running migrations:
  No migrations to apply.
You have installed Django's auth system, and don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'takesxisximada'): ADMINISTORATOR_NAME
Email address: your.email@mail.address   
Password: 
Password (again): 
Superuser created successfully.
(env)08:35 ~/djexample $ 
```

# Webに公開する

## アプリケーションの設定

ドメイン名を設定します。(無料プランだと変更できません。)
![スクリーンショット 2015-06-28 17.41.11.png](https://qiita-image-store.s3.amazonaws.com/0/36261/8f2ebc29-fbcc-eb79-a287-8b02865fb45c.png)

使用するWebフレームワークを選択します。
Djangoがありますが、これを選択するとPython2.7系、Django1.6系になってしまうので `Manual configuration` を選択します。

![スクリーンショット 2015-06-28 17.41.19.png](https://qiita-image-store.s3.amazonaws.com/0/36261/ce583be5-a8c9-4382-5436-e2d7bf994e2d.png)

Pythonのバージョンを選択します。Python3.4一択です。

![スクリーンショット 2015-06-28 17.41.25.png](https://qiita-image-store.s3.amazonaws.com/0/36261/5f24e229-f202-fde8-191d-7bed98d0aa8a.png)

とりあえずNextを押してしまいます。
![スクリーンショット 2015-06-28 17.41.32.png](https://qiita-image-store.s3.amazonaws.com/0/36261/d48f0b10-998a-7fed-d315-548c2cdcb767.png)

この段階で新しいdjexampleがPythonAnywhereで管理できるようになりました。

## virtualenvの設定

`Enter path to a virtualenv, if disired` を押下すると自作したvirtualenvを使用するように設定できます。

![スクリーンショット 2015-06-28 17.43.14.png](https://qiita-image-store.s3.amazonaws.com/0/36261/d05b7a7d-611f-fe48-8cde-11b298c2e359.png)

こんな感じ。
![スクリーンショット 2015-06-28 17.44.32.png](https://qiita-image-store.s3.amazonaws.com/0/36261/14d9423f-cb0b-18c0-fca8-569540f0ff8a.png)

## wsgiファイルの設定

読み込まれるwsgiファイルは固定になるようなので、`/var/www` 配下にあるwsgiファイルを差し替えます。

とりあえず古いファイルをバックアップします。

```
(env)08:55 ~/djexample $ cp /var/www/takesxisximada_pythonanywhere_com_wsgi.py /var/www/takesxisximada_pythonanywhere_com_wsgi.py.old 
(env)08:55 ~/djexample $ 
```

djexampleのwsgi.pyをもともと/var/www配下にあったファイルと同じ名前でcopyします。

```
(env)08:55 ~/djexample $ cp djexample/wsgi.py /var/www/takesxisximada_pythonanywhere_com_wsgi.py
(env)08:56 ~/djexample $
```

そして次のように書き換えます。

```
"""
WSGI config for djexample project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/
"""
import os
import sys
from django.core.wsgi import get_wsgi_application
path = '/home/TakesxiSximada/djexample'
if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'djexample.settings'
application = get_wsgi_application()
```

実際には以下を追加しました。

```
path = '/home/TakesxiSximada/djexample'
if path not in sys.path:
    sys.path.append(path)

os.environ['DJANGO_SETTINGS_MODULE'] = 'djexample.settings'
```

WSGIファイルはWEBからも書き換えられます。
![スクリーンショット 2015-06-28 18.45.57.png](https://qiita-image-store.s3.amazonaws.com/0/36261/9eecb702-86f6-7e1f-c55c-34a714888c0c.png)


## 静的ファイルの設定を追加する

## settings.pyにSTATIC_ROOTを追加

```
(env)09:47 ~/djexample $ tail djexample/settings.py 
USE_L10N = True

USE_TZ = True

# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.8/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
```

## urls.pyに静的ファイルの設定を追加

```
(env)09:48 ~/djexample $ cat djexample/urls.py 
from django.conf.urls import include, url
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
```

## collectstaticする

static fileをcllectstaticで回収します。

```
(env)09:50 ~/djexample $ python manage.py collectstatic                                                                                     
You have requested to collect static files at the destination
location as specified in your settings:
    /home/TakesxiSximada/djexample/static
This will overwrite existing files!
Are you sure you want to do this?
Type 'yes' to continue, or 'no' to cancel: yes
~省略~
(env)09:50 ~/djexample $ 
```

# 管理画面にアクセスする

## アプリケーションをリスタート

![スクリーンショット 2015-06-28 18.51.37.png](https://qiita-image-store.s3.amazonaws.com/0/36261/aef83d36-b1d3-899e-63e9-a309b8ae68a9.png)

## 見てみる

http://takesxisximada.pythonanywhere.com/admin にアクセスする。

![スクリーンショット 2015-06-28 18.52.43.png](https://qiita-image-store.s3.amazonaws.com/0/36261/1e464184-2ffe-3ab0-78b8-bca27775b189.png)

やったー。