新規記事の投稿を行うことで、非表示にすることが可能です。
2016年01月08日
【py】python2.7とdjango1.9でpydev使ったwebアプリケーションまとめ(※入門レベル)
バージョンが古いけど実行環境をこれで作ったので、ここでの覚書き。
いろんなサイトさまの情報を元にしてもバージョンの差で各種エラーが出てそのとおりいかないことなどをメモしておきます。
python2.7→python3系で対応してないものがあるかも&情報がまだ少ないので2.7を選んだ
django1.9→現状(2016.1.8)の最新がこれだった。2.7以上で対応してるっぽいので問題ないと判断。
IDEはeclipse(pleiades-e4.3)、pydevは4.4.0です。
djangoプロジェクトの作成
djangoプロジェクトは1つで、その中に各種アプリを追加するイメージらしいので、この作業は基本1回だけのようです。
現状のディレクトリ構成
この時点で実行(実行→Pydev/Django)したのち、「http://127.0.0.1:8000/」とやると、「It worked!」が青背景で表示されたらここまではOKです。
駅伝でいうと走れる権利を得てスタート地点に並んでるくらいです(ここまでくるのも大変だったがまだ始まってない)
アプリケーションの追加
現状のディレクトリ構成
やりたいこと:「http://127.0.0.1:8000/onigiri/」とブラウザで指定するとなんらかのおにぎりの具材が表示される
そのための設定を各種追加していきます。
1.プロジェクトの直下に「template」フォルダを作成し、「onigiri/index.html」を作成
2.htmlを作成
プロジェクトにひとつだけの「komekome」フォルダにある「settings.py」にパスを通します。
となっている「DIRS」が編集対象です。絶対パスを通します。
TEMPLATE_DIRSとして、TEMPLATESと別の定義にしてしまうと
ルートとなる「komekome」のurls.pyへの定義は必須ですが
各アプリのパスを細かくここに定義するもよし、細分化するもよし(諸説ありそうですが)
私は今回、細分化するほうを選びました。
1.komekome/urls.pyの編集
onigiriのパスはonigiriディレクトリのurls.pyを見るようにしていると思われます。
2.onigiri/urls.pyの編集
ファイルがない場合はまずurls.pyを作成してから
このurlの定義によるエラーがけっこう取れなくて苦労しました。。エラーが出るので間違っていることはわかっても。
一番参考になったのは、komekome/views.pyに最初から載っているコメント文です。
定義を置く階層ごとに指定するものが違う。。。?ことに最初に気づかせてもらったのもこれのおかげです。
あとは、これで「実行」→「Pydev:Django」でサーバ起動し、ブラウザで
http://127.0.0.1:8000/onigiri/
とすると、あれ?エラー。
というエラーが出ているので、たぶん文字コード問題と推察し、
onigiri/views.pyを以下のように編集
どのタイミングでもこの前提に気をつけるだけで違いそうですね。
それではもう一度、
http://127.0.0.1:8000/onigiri/を指定
が表示されました!
かなりの初歩ですがやっとできた!この定義問題にはまりまくったので動くとうれしい!
けっこうバージョンで定義のお作法が違うので安易になんでもいけるわけではなさそうです(当たり前)
いろんなサイトさまの情報を元にしてもバージョンの差で各種エラーが出てそのとおりいかないことなどをメモしておきます。
python2.7→python3系で対応してないものがあるかも&情報がまだ少ないので2.7を選んだ
django1.9→現状(2016.1.8)の最新がこれだった。2.7以上で対応してるっぽいので問題ないと判断。
IDEはeclipse(pleiades-e4.3)、pydevは4.4.0です。
djangoプロジェクトの作成
- Pydevパッケージエクスプローラーで右クリック→「新規」→「その他」
- Pydev→「Pydev Djangoプロジェクト」を選択しで「次へ」
- プロジェクト名を任意で入力(ex.komekome)※他の値は初期値ですがプロジェクトタイプは「Python」、文法バージョンは2.7でした。)
- 参照されるプロジェクトがある場合はそれにチェック(今回は新規なのでチェックなし)で「次へ」
- Django version→「1.4 or later」(※1.9だから)、データベースは今は使わないので変更せず「完了」
djangoプロジェクトは1つで、その中に各種アプリを追加するイメージらしいので、この作業は基本1回だけのようです。
現状のディレクトリ構成
komekome
--manage.py
-- komekome
--__init__.py
--settings.py
--urls.py
--wsgi.py
この時点で実行(実行→Pydev/Django)したのち、「http://127.0.0.1:8000/」とやると、「It worked!」が青背景で表示されたらここまではOKです。
駅伝でいうと走れる権利を得てスタート地点に並んでるくらいです(ここまでくるのも大変だったがまだ始まってない)
アプリケーションの追加
- プロジェクト「komekome」を右クリック→「django」→「create application(manage.py startapp)」
- app nameに任意記入(ex:onigiri)→OK
現状のディレクトリ構成
komekome
--manage.py
-- komekome
--__init__.py
--settings.py
--urls.py
--wsgi.py
-- onigiri # --NEW!!
--migrations
--__init__.py
--admin.py
--apps.py
--models.py
--tests.py
--views.py
やりたいこと:「http://127.0.0.1:8000/onigiri/」とブラウザで指定するとなんらかのおにぎりの具材が表示される
そのための設定を各種追加していきます。
- 表示するhtmlを作成
- settings.pyにhtmlのあるディレクトリを追加
- views.pyにロジックを追加
- urls.pyにurlのパスを追加
表示するhtmlを作成
1.プロジェクトの直下に「template」フォルダを作成し、「onigiri/index.html」を作成
2.htmlを作成
<!DOCTYPE html>
<html>
<head>
</head>
<body>
今日のおにぎりは何食べたい?<br/>
{{message}}<br/>
</body>
</html>
settings.pyにhtmlのあるディレクトリを追加
プロジェクトにひとつだけの「komekome」フォルダにある「settings.py」にパスを通します。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
となっている「DIRS」が編集対象です。絶対パスを通します。
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ['/workspace/komekome/template'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
TEMPLATE_DIRSとして、TEMPLATESと別の定義にしてしまうと
TEMPLATE_* settings were deprecated in Django 1.8
と怒られるので、当環境のdjango1.9ではTEMPLATESの中にdict形式で追加するしかなさそうです。views.pyにロジックを追加
def index(request):
return render(request, 'onigiri/index.html', {"message": "うめ"},)
urls.pyにurlのパスを追加
ルートとなる「komekome」のurls.pyへの定義は必須ですが
各アプリのパスを細かくここに定義するもよし、細分化するもよし(諸説ありそうですが)
私は今回、細分化するほうを選びました。
1.komekome/urls.pyの編集
from django.conf.urls import url,include
urlpatterns = [
url(r'^onigiri/', include('onigiri.urls')),
]
onigiriのパスはonigiriディレクトリのurls.pyを見るようにしていると思われます。
2.onigiri/urls.pyの編集
ファイルがない場合はまずurls.pyを作成してから
from django.conf.urls import include, url
from onigiri import views # ← views.pyをimport
urlpatterns = [
url(r'^$', views.index , name='index'),
#url(r'^(?P\d+)/$', 'firstapp.views.detail'),
]
このurlの定義によるエラーがけっこう取れなくて苦労しました。。エラーが出るので間違っていることはわかっても。
一番参考になったのは、komekome/views.pyに最初から載っているコメント文です。
"""komekome URL Configuration
The `urlpatterns` list routes URLs to views. For more information please see:
https://docs.djangoproject.com/en/1.9/topics/http/urls/
Examples:
Function views
1. Add an import: from my_app import views
2. Add a URL to urlpatterns: url(r'^$', views.home, name='home')
Class-based views
1. Add an import: from other_app.views import Home
2. Add a URL to urlpatterns: url(r'^$', Home.as_view(), name='home')
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r'^blog/', include('blog.urls'))
"""
定義を置く階層ごとに指定するものが違う。。。?ことに最初に気づかせてもらったのもこれのおかげです。
あとは、これで「実行」→「Pydev:Django」でサーバ起動し、ブラウザで
http://127.0.0.1:8000/onigiri/
とすると、あれ?エラー。
but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
というエラーが出ているので、たぶん文字コード問題と推察し、
onigiri/views.pyを以下のように編集
# -*- coding: utf-8 -*-
from django.shortcuts import render
# Create your views here.
def index(request):
return render(request, 'onigiri/index.html', {"message": "うめ"},)
どのタイミングでもこの前提に気をつけるだけで違いそうですね。
それではもう一度、
http://127.0.0.1:8000/onigiri/を指定
今日のおにぎりは何食べたい?
うめと昆布
が表示されました!
かなりの初歩ですがやっとできた!この定義問題にはまりまくったので動くとうれしい!
けっこうバージョンで定義のお作法が違うので安易になんでもいけるわけではなさそうです(当たり前)