今までは、Python(Django)でWebアプリを作成していたが、これからはJavaで作らなければならなくなった
いろいろとJavaのWebフレームワークを比較して、Spring MVC 3.1.0 Releaseで作成することにした
DI (Dependency Injection)など、慣れない考え方で苦戦中だが、詰まったところを記録に残していく
2011年12月29日木曜日
2011年10月30日日曜日
Google App EngineでDjango
2011年9月19日月曜日
MacへのOpenCVインストール
MacへOpenCVをインストール
Pythonから呼び出すため、Python 2.7とともにインストール
今回は、ソースコードからではなく、MacPortsを利用してインストール
(依存モジュールが多いため)
1.MacPortsのインストール
http://www.macports.org/からインストーラをダウンロードして、簡単にインストールできる
2.MacPortsでOpenCVをインストール
ターミナルを起動し、次のコマンドを実行すれば、インストールが開始する
# sudo port install opencv +python27
・MacPortsでインストール中にPerlがエラーを起こした
対策としては、activeなperl5.8をアンインストールして、最新のPerlだけにすればよい
手順は次の通り
1.インストールされているPerlを表示
これで、OpenCVのインストールを再会すればインストールできる
(インストールが完了するまでに、2時間ほどかかった・・・)
Pythonから呼び出すため、Python 2.7とともにインストール
今回は、ソースコードからではなく、MacPortsを利用してインストール
(依存モジュールが多いため)
1.MacPortsのインストール
http://www.macports.org/からインストーラをダウンロードして、簡単にインストールできる
2.MacPortsでOpenCVをインストール
ターミナルを起動し、次のコマンドを実行すれば、インストールが開始する
# sudo port install opencv +python27
・MacPortsでインストール中にPerlがエラーを起こした
Error: Target org.macports.activate returned: Image error: /opt/local/bin/a2p is being used by the active perl5.8 port. Please deactivate this port first, or use 'port -f activate perl5' to force the activation.エラー内にあるport -f activate perl5を実行しても、うまくいかなかった
対策としては、activeなperl5.8をアンインストールして、最新のPerlだけにすればよい
手順は次の通り
1.インストールされているPerlを表示
# sudo port installed | grep perl perl5 @5.8.9_0 perl5 @5.12.3_0+perl5_12 perl5.8 @5.8.9_3 (active) perl5.12 @5.12.3_1 (active)2.インストールされているPerlの中から、古いバージョンのものをアンインストール
# sudo port uninstall perl5 @5.8.9_0 # sudo port uninstall perl5.8
これで、OpenCVのインストールを再会すればインストールできる
(インストールが完了するまでに、2時間ほどかかった・・・)
2011年8月7日日曜日
HTTPレスポンスコードの取得
Pythonのurllib2を利用してWebサイトへアクセスしたときのHTTPレスポンスコードを利用するために、保存しておく方法
urllib2では、200以外はHTTPExceptionとなってしまうため、例外時の処理として書かなければならない
参考サイト:
urllib2では、200以外はHTTPExceptionとなってしまうため、例外時の処理として書かなければならない
- import urllib2
- # HTTPレスポンスコードを格納する変数
- http_code = 0
- # アクセスするwebサイトのURL
- url = 'http://www.yahoo.co.jp'
- try:
- # webサイトへアクセス
- web = urllib2.urlopen(url)
- # 成功した場合、この行以下も実行されるのでhttp_codeは200
- http_code = 200
- except: HTTPError, e:
- http_code = e.code
- print http_code
import urllib2 # HTTPレスポンスコードを格納する変数 http_code = 0 # アクセスするwebサイトのURL url = 'http://www.yahoo.co.jp' try: # webサイトへアクセス web = urllib2.urlopen(url) # 成功した場合、この行以下も実行されるのでhttp_codeは200 http_code = 200 except: HTTPError, e: http_code = e.code print http_codeこれで、正しくWebサイトにアクセスできたかを確認できる
参考サイト:
実行ファイルの親ディレクトリのパスを取得
Pythonでプログラムを実行しているファイルの親ディレクトリのパスを取得する方法
- import os
- parent_path = os.path.abspath(os.path.dirname(__file__))
- print parent_path
import os parent_path = os.path.abspath(os.path.dirname(__file__)) print parent_path例えば、/workspace/src/test.pyで実行した場合、parent_pathは'/workspace/src'となる
2011年8月6日土曜日
PythonでWebのリンクリスト取得
BeautifulSoupを利用してWebサイトのページ内にあるリンクをリストとして取得する方法
- import urllib2
- from BeautifulSoup import BeautifulSoup
- if __name__ == '__main__':
- # アクセスするWebサイトのURL
- url = 'http://www.yahoo.co.jp/'
- # Webサイトへアクセス
- web = urllib2.urlopen(url)
- # BeautifulSoupで解析できるよう読み込む
- html = BeautifulSoup(web)
- # 'a'タグの全ての要素をリストとして抽出する
- base_linklist = self.getTagList('a')
- # 抽出した要素リストを1つずつ解析
- for link in base_linklist:
- # 'href'がタグ内に含まれない場合は無視する
- if link.__str__().find('href=') != -1:
- # リンク名:リンクURLと表示
- print link.string.__str__() + ':' + link['href']
import urllib2 from BeautifulSoup import BeautifulSoup if __name__ == '__main__': # アクセスするWebサイトのURL url = 'http://www.yahoo.co.jp/' # Webサイトへアクセス web = urllib2.urlopen(url) # BeautifulSoupで解析できるよう読み込む html = BeautifulSoup(web) # 'a'タグの全ての要素をリストとして抽出する base_linklist = self.getTagList('a') # 抽出した要素リストを1つずつ解析 for link in base_linklist: # 'href'がタグ内に含まれない場合は無視する if link.__str__().find('href=') != -1: # リンク名:リンクURLと表示 print link.string.__str__() + ':' + link['href']リンク名が画像などの場合、link.stringはNoneが得られるため、文字列に変換しておく必要がある
2011年8月5日金曜日
Pythonでスクレイピング(Cookie取得)
urllib2とcookielibでWebサイトへアクセスしたときに、Cookieを取得するサンプル
Cookieが設定されている場合、cookielib.CookieJarオブジェクトとして取得できる
- import urllib2, cookielib
- from BeautifulSoup import BeautifulSoup
- if __name__ == '__main__':
- # アクセスするWebサイトのURLを設定
- url = 'http://www.google.co.jp'
- # Cookieを格納するオブジェクト
- cookie = cookielib.CookieJar()
- # Webサイトへアクセスするオブジェクト
- opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie))
- # Webサイトへアクセス
- web = opener.open(url)
- # BeautifulSoupで解析
- html = BeautifulSoup(web)
- # 取得したCookie内容を表示
- print cookie
- # 取得したHTML内容を表示
- print html.prettify()
import urllib2, cookielib from BeautifulSoup import BeautifulSoup if __name__ == '__main__': # アクセスするWebサイトのURLを設定 url = 'http://www.google.co.jp' # Cookieを格納するオブジェクト cookie = cookielib.CookieJar() # Webサイトへアクセスするオブジェクト opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookie)) # Webサイトへアクセス web = opener.open(url) # BeautifulSoupで解析 html = BeautifulSoup(web) # 取得したCookie内容を表示 print cookie # 取得したHTML内容を表示 print html.prettify()
Cookieが設定されている場合、cookielib.CookieJarオブジェクトとして取得できる
2011年8月3日水曜日
Pythonでスクレイピング
PythonでスクレイピングするライブラリとしてBeautifulSoupを利用
HTMLを取得して、それを表示する簡単なサンプル
HTMLを取得して、それを表示する簡単なサンプル
- import urllib2
- from BeautifulSoup import BeautifulSoup
- if __name__ == '__main__':
- web = urllib2.urlopen('http://www.google.co.jp/')
- html = BeautifulSoup(web)
- print html.prettify()
import urllib2 from BeautifulSoup import BeautifulSoup if __name__ == '__main__': web = urllib2.urlopen('http://www.google.co.jp/') html = BeautifulSoup(web) print html.prettify()これで、指定したWebサイトのHTMLを取得/表示することができる
2011年5月21日土曜日
Djangoのデータベースアクセス(その3)
テーブルのデータを取得する方法
1.データを取得する関数の作成
sampleprj/sampleapp/views.pyにshowという関数を作成し、次のようなコードを書く
2.URL割り当て
show関数を割り当てるURLを定義する
sampleprj/urls.pyの最後に次のコードを追加する
これでhttp://localhost:8000/sampleapp/show/にアクセスすると、コンソールにMemoテーブル内の全てのデータが表示される
参考サイト:
・クエリを生成する
1.データを取得する関数の作成
sampleprj/sampleapp/views.pyにshowという関数を作成し、次のようなコードを書く
- # encoding: utf-8
- from django.http import HttpResponse
- from sampleprj.sampleapp.models import Memo
- def show(request):
- memos = Memo.objects.all()
- for memo in memos:
- print memo.userid
- print memo.title
- print memo.content
- return HttpResponse('データを取得しました')
# encoding: utf-8 from django.http import HttpResponse from sampleprj.sampleapp.models import Memo def show(request): memos = Memo.objects.all() for memo in memos: print memo.userid print memo.title print memo.content return HttpResponse('データを取得しました')
2.URL割り当て
show関数を割り当てるURLを定義する
sampleprj/urls.pyの最後に次のコードを追加する
- urlpatterns += patterns('sampleprj.sampleapp',
- url(r'^sampleapp/show/$', 'show'),
- )
urlpatterns += patterns('sampleprj.sampleapp', url(r'^sampleapp/show/$', 'show'), )
これでhttp://localhost:8000/sampleapp/show/にアクセスすると、コンソールにMemoテーブル内の全てのデータが表示される
参考サイト:
・クエリを生成する
2011年5月14日土曜日
Djangoのデータベースアクセス(その2)
新規データを追加する方法
ユーザが、http://localhost:8000/sampleapp/add/にアクセスした時に、前回作成したテーブルに新規にデータを追加する手順
1.アクセスする関数の作成
sampleprj/sampleapp/views.pyにaddという関数を作成し、次のようなコードを書く
2.URL割り当て
add関数を割り当てるURLを定義する
sampleprj/urls.pyの最後に次のコードを追加する
これでhttp://localhost:8000/sampleapp/add/にアクセスするとテーブルに追加される。
ユーザが、http://localhost:8000/sampleapp/add/にアクセスした時に、前回作成したテーブルに新規にデータを追加する手順
1.アクセスする関数の作成
sampleprj/sampleapp/views.pyにaddという関数を作成し、次のようなコードを書く
- # encoding: utf-8
- from django.http import HttpResponse
- from sampleprj.sampleapp.models import Memo
- def add(request):
- memo = Memo()
- memo.userid = 1
- memo.title = 'first memo'
- memo.content = 'memo content'
- return HttpResponse('データを追加しました')
# encoding: utf-8 from django.http import HttpResponse from sampleprj.sampleapp.models import Memo def add(request): memo = Memo() memo.userid = 1 memo.title = 'first memo' memo.content = 'memo content' return HttpResponse('データを追加しました')
2.URL割り当て
add関数を割り当てるURLを定義する
sampleprj/urls.pyの最後に次のコードを追加する
- urlpatterns += patterns('sampleprj.sampleapp',
- url(r'^sampleapp/add/$', 'add'),
- )
urlpatterns += patterns('sampleprj.sampleapp', url(r'^sampleapp/add/$', 'add'), )
これでhttp://localhost:8000/sampleapp/add/にアクセスするとテーブルに追加される。
2011年5月7日土曜日
Djangoのデータベースアクセス(その1)
Djangoでデータベースへアクセスするためによく使う記述法のメモ
ここでは、まずテーブルを作成するまでの手順
次の例を利用する
プロジェクト名:sampleprj
アプリケーション名:sampleapp
テーブル名:Memo
データベースへのテーブル作成手順
1.モデルを定義
「sampleprj/sampleapp/models.py」に次のテーブル構成を追加
・userid:ユーザID、整数型
・title:タイトル、文字列型、最大100文字まで
・content:内容、文字列型、最大255文字まで
・created_date:作成日時、日時型、作成日時を自動設定
・updated_date:更新日時、日時型、更新日時を自動設定
models.py編集後に「# python manage.py syncdb」を実行することで、sampleapp_Memoというテーブルが作成される
参考サイト
・モデルフィールドリファレンス
ここでは、まずテーブルを作成するまでの手順
次の例を利用する
プロジェクト名:sampleprj
アプリケーション名:sampleapp
テーブル名:Memo
データベースへのテーブル作成手順
1.モデルを定義
「sampleprj/sampleapp/models.py」に次のテーブル構成を追加
- from django.db import models
- class Memo(models.Model):
- userid = models.IntegerField()
- title = models.CharField(max_length=100)
- content = models.CharField(max_length=255)
- created_date = models.DateTimeField(auto_now_add=True)
- updated_date = models.DateTimeField(auto_now=True)
from django.db import models class Memo(models.Model): userid = models.IntegerField() title = models.CharField(max_length=100) content = models.CharField(max_length=255) created_date = models.DateTimeField(auto_now_add=True) updated_date = models.DateTimeField(auto_now=True)テーブルの構成は、次の通り
・userid:ユーザID、整数型
・title:タイトル、文字列型、最大100文字まで
・content:内容、文字列型、最大255文字まで
・created_date:作成日時、日時型、作成日時を自動設定
・updated_date:更新日時、日時型、更新日時を自動設定
models.py編集後に「# python manage.py syncdb」を実行することで、sampleapp_Memoというテーブルが作成される
参考サイト
・モデルフィールドリファレンス
2011年5月4日水曜日
Djangoエラー:Non-ASCII character views.py, but no encoding declared
エラー内容
・ページにアクセスしたときに、「Non-ASCII character '\xe3' in file views.py on line 9, but no encoding declared;」というエラーが発生し、アクセスできない
原因
・日本語をファイル内で利用したが、文字コードを宣言しなかった
対処法
・日本語を利用したファイルの1行目に次のエンコーディング宣言を追加
・ページにアクセスしたときに、「Non-ASCII character '\xe3' in file views.py on line 9, but no encoding declared;」というエラーが発生し、アクセスできない
原因
・日本語をファイル内で利用したが、文字コードを宣言しなかった
対処法
・日本語を利用したファイルの1行目に次のエンコーディング宣言を追加
- # encoding: UTF-8
# encoding: UTF-8
2011年5月2日月曜日
Djangoエラー:CSRF verification failed. Request aborted.
エラー内容
・djangoで、フォームに入力した内容をPOSTしたときに、「CSRF verification failed. Request aborted.」というエラー
対処法
・「(プロジェクトフォルダ)/settings.py」のMIDLEWARE_CLASSES内に次の1行を追加
エラー画面
・djangoで、フォームに入力した内容をPOSTしたときに、「CSRF verification failed. Request aborted.」というエラー
対処法
・「(プロジェクトフォルダ)/settings.py」のMIDLEWARE_CLASSES内に次の1行を追加
- 'django.middleware.csrf.CsrfResponseMiddleware',
'django.middleware.csrf.CsrfResponseMiddleware',
エラー画面
テンプレートからHTMLを読み込む手順
djangoでテンプレートからHTMLを読み込む手順
テンプレートディレクトリを追加
・「(プロジェクトディレクトリ)/settings.py」にあるTEMPLATE_DIRS = ()の中にディレクトリのパスを追加する
テンプレートHTMLファイルを追加
・設定したテンプレートディレクトリ内に読み込むためのHTMLファイルを作成
例えば、'/home/project/templates/sampleapp/index.htmlを追加
views側でテンプレートを読み込む
・テンプレートを表示したいアプリケーションのviews.pyにテンプレートを読み込むコードを挿入する
URLを設定
・「(プロジェクトディレクトリ)/urls.py」にviewを登録する
・urlpatterns = ('',)を次のように編集
読み込みを確認
# python manage.py runserverを実行して、ブラウザでhttp://localhost:8000/sampleapp/にアクセスして表示されることを確認
参考サイト:テンプレートの利用方法
テンプレートディレクトリを追加
・「(プロジェクトディレクトリ)/settings.py」にあるTEMPLATE_DIRS = ()の中にディレクトリのパスを追加する
- # 追加するディレクトリ:/home/project/templates
- TEMPLATE_DIRS = (
- '/home/project/templates',
- )
# 追加するディレクトリ:/home/project/templates TEMPLATE_DIRS = ( '/home/project/templates', )
テンプレートHTMLファイルを追加
・設定したテンプレートディレクトリ内に読み込むためのHTMLファイルを作成
例えば、'/home/project/templates/sampleapp/index.htmlを追加
views側でテンプレートを読み込む
・テンプレートを表示したいアプリケーションのviews.pyにテンプレートを読み込むコードを挿入する
- # 追加するアプリケーションが'/home/project/sampleapp'の場合、
- # '/home/project/sampleapp/views.py'に次を追加
- from django.http import HttpResponse
- from django.template import Context, loader
- def index(request):
- template = loader.get_template('sampleapp/index.html')
- return HttpResponse(template.render(Context()))
# 追加するアプリケーションが'/home/project/sampleapp'の場合、 # '/home/project/sampleapp/views.py'に次を追加 from django.http import HttpResponse from django.template import Context, loader def index(request): template = loader.get_template('sampleapp/index.html') return HttpResponse(template.render(Context()))
URLを設定
・「(プロジェクトディレクトリ)/urls.py」にviewを登録する
・urlpatterns = ('',)を次のように編集
- urlpatterns = ('',
- url(r'^sampleapp/$', 'project.sampleapp.views.index'),
- )
urlpatterns = ('', url(r'^sampleapp/$', 'project.sampleapp.views.index'), )
読み込みを確認
# python manage.py runserverを実行して、ブラウザでhttp://localhost:8000/sampleapp/にアクセスして表示されることを確認
参考サイト:テンプレートの利用方法
2011年5月1日日曜日
プログラムの絶対パスを取得
Pythonで実行するプログラムの絶対パスを取得する方法
実行するプログラムの親ディレクトリを取得する方法
- print __file__
print __file__
実行するプログラムの親ディレクトリを取得する方法
- import os
- parent_dir = os.path.dirname(__file__)
import os parent_dir = os.path.dirname(__file__)
現在のディレクトリ取得
Pythonで現在のディレクトリを取得する方法
これで、プログラムを実行しているディレクトリを取得できる
eclipseで実行した場合、workspaceが返される
参考サイト:Pythonドキュメント
- from os
- current_path = os.getcwd()
- print current_path
from os current_path = os.getcwd() print current_path
これで、プログラムを実行しているディレクトリを取得できる
eclipseで実行した場合、workspaceが返される
参考サイト:Pythonドキュメント
2011年4月22日金曜日
2011年4月20日水曜日
macのeclipseでdjangoフレームワークを利用した開発環境構築
必要なもの
1. ダウンロードしたeclipseを解凍
Django環境を構築
0. python 2.7.1をインストール(必要な場合)
0. python 2.7.1をインストール(必要な場合)
1. ターミナルを起動してDjango-1.3.tar.gzを解凍
2. ターミナルでDjango-1.3のフォルダへ移動し、「python setup.py install」と打ってreturnキーを押すとPythonライブラリのsite-packagesフォルダ以下にdjangoがインストールされる
Python環境をeclipseにインストール手順
1. ダウンロードしたeclipseを解凍
2. eclipseを起動して、「Help > Install New Software...」を選択
3. Work with:の横にある「Add...」ボタンを押す
4. ポップアップしたAdd Repositoryウィンドウで、NameにPyDev、Locationにhttp://pydev.org/updatesと入力して「OK」ボタンを押す
5. Work with:にPyDevが選択されていることを確認し、表示された項目のうち「PyDev」を選択
6. 流れにそってNextを押す
7. インストール中に、証明書が不明だと言われるが信頼してインストールを続ける
8. eclipseを再起動
9. eclipse > 環境設定を起動
10. Pydev > Interpreter - Pythonを選択
11. Python InterpretersでAuto configボタンを押すと自動で設定される
12. Pythonライブラリパスとして、sys.pathに登録されているパスのリストが表示されるので選択しておく
7. インストール中に、証明書が不明だと言われるが信頼してインストールを続ける
8. eclipseを再起動
9. eclipse > 環境設定を起動
10. Pydev > Interpreter - Pythonを選択
11. Python InterpretersでAuto configボタンを押すと自動で設定される
12. Pythonライブラリパスとして、sys.pathに登録されているパスのリストが表示されるので選択しておく
django 1.3リリース
djangoがバージョン1.3をリリース:http://www.djangoproject.com/
変更点:リリースノート
変更点:リリースノート
- 新機能:new futures
- バグ修正
- 既存機能の改善
- 前方非互換な改善:backwords-imcompatible changes
詳細は次回以降
2011年4月3日日曜日
Web UI設計ツール
簡単にWeb UIを設計(モックアップレベルのデザイン)するツールを調査
- Mac/Windows→Adobe Fireworks
- iPad→iMockups
iMockupsは、iPad上で作成できるので、とても簡単
iPadでイメージを共有しながら、デザインしていくのにも役に立つ
大体イメージが共有できれば、Fireworksでデザインを詰めていくといい?
2011年2月13日日曜日
wordpress設置
wordpressを新しく設定したので、インストールしたプラグインリストの備忘録
- wordpressのバージョン:3.0.8
- Cimy Sift SMTP:wordpressの管理メールを送信するアドレスをGmailなどの外部メールサーバに設定する為のプラグイン
- Ktai Entry:ケータイからのメール送信で投稿(メールに写真を添付して送れば、記事に貼り付けられる)
- WP-DBManager:データベースに記録されている情報(記事の内容など)をSQL形式で自動的にバックアップするプラグイン
- Wordpress Backup:アップロードされた画像などをGZip形式で自動的にバックアップするプラグイン
登録:
投稿 (Atom)