ラベル Django の投稿を表示しています。 すべての投稿を表示
ラベル Django の投稿を表示しています。 すべての投稿を表示

2011/10/23

Djangoの画像管理プラグインアプリdjango-photologueを試してみました。



django-photologueは、画像管理に必要な機能が、おおよそ用意されているプラグインです。Djangoなので、この画像管理の機能を自分のアプリ用にカスタマイズして利用することも可能です。

django-photologue
A customizable plug-in photo management application for the Django web framework.
http://code.google.com/p/django-photologue/


上記のサイトよりソースをダウンロードしてインストールします。さくらのVPSサーバにインストールします。インストール方法は、READMEに従いました。ソースフォルダの中で、以下のコマンドでインストールします。
$ python setup.py install
インストールを確認します。
$ python
Python 2.4.3 (#1, May  5 2011, 16:39:10)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> import photologue
>>> photologue.VERSION
(2, 2)
setting.pyに設定を追加していきます。
INSTALLED_APPS に photologue を追加します。
    INSTALLED_APPS = (
         # ...other installed applications,
         'photologue',
    )
django-photologue は、PIL(Python Imaging Library)を利用するので、インストールします。PIL(Python Imaging Library)のインストールの前に、libjpeg-develをインストールしておきます。
$ sudo yum install libjpeg-devel
PIL(Python Imaging Library)の1.1.7をソースからインストールします。
$ wget http://effbot.org/downloads/Imaging-1.1.7.tar.gz
$ cd Imaging-1.1.7
$ python setup.py build
$ sudo python setup.py install
PIL(Python Imaging Library)インストールを確認します。
$ python selftest.py
--------------------------------------------------------------------
PIL 1.1.7 TEST SUMMARY
--------------------------------------------------------------------
Python modules loaded from ./PIL
Binary modules loaded from /usr/lib64/python2.4/site-packages/PIL
--------------------------------------------------------------------
*** PIL CORE support not installed
*** TKINTER support not installed
--- JPEG support ok
--- ZLIB (PNG/ZIP) support ok
*** FREETYPE2 support not installed
*** LITTLECMS support not installed
--------------------------------------------------------------------
Running selftest:
--- 57 tests passed.
syncdbを行います。
$ python manage.py syncdb
/usr/lib/python2.4/site-packages/django/db/__init__.py:60: DeprecationWarning: Short names for ENGINE in database configurations are deprecated. Prepend default.ENGINE with 'django.db.backends.'
  DeprecationWarning
Creating tables ...
Creating table photologue_gallery_photos
Creating table photologue_gallery
Creating table photologue_galleryupload
Creating table photologue_photo
Creating table photologue_photoeffect
Creating table photologue_watermark
Creating table photologue_photosize
Installing custom SQL ...
Installing indexes ...
No fixtures found.
Photologueを初期化します。サムネール画像等のサイズ指定、エフェクトの初期指定を行います。ここで行った設定は、後でも変更可能です。

This command initiates the Photologue initialization routine and prompts you to create a number of default photo sizes and effects. This command takes no arguments.
$ python manage.py plinit
urls.pyにphotologueを追加します。
    # urls.py:
    urlpatterns += patterns('',
        (r'^admin/(.*)', admin.site.root),
        (r'^photologue/', include('photologue.urls')),
    )
ソースに含まれているphotologue用のtemplatesを配置します。
    myproject/
        myapp/
            ...
        templates/
            photologue/
                ...
Djangoを起動して、管理画面にアクセスします。

管理画面に「photologue」の項目が追加されています。


Gallery uploadsを使うと、サーバにアップしたい複数の画像を一度にアップできます。アップしたい複数の画像をフォルダにまとめて、zipに圧縮します。そのzipをアップすることで、画像ギャラリーが自動で作成されます。


画像ギャラリーが作成されました。


Photoには、それぞれの画像がサムネール付きで登録されています。


管理画面でプレビューを確認できます。


メインに表示される画像サイズ、サムネールの画像のサイズ、管理画面に表示するサムネール画像のサイズは、変更可能です。これ以外の画像サイズの設定項目を作ることも可能です。



画像にエフェクトを掛けることも、管理画面からの操作で可能です。メインの画像に「Display Reflection」のエフェクトを掛けた様子です。


エフェクトは、photo effectの画面で追加、変更、削除が可能です。


上記の画像には、ウォーターマークを設定しています。ウォーターマーク用のpngを用意して、Watermarksにアップすることによって、ウォーターマークの管理、運用が可能です。

2011/10/09

Django Google Maps API v3 and Static Maps API helper appのサンプルを試してみました。



さくらVPSのDjango1.3にdjango-gmapi(Django Google Maps API v3 and Static Maps API helper app)のインストールをして、サンプルアプリの動作を確認しました。


Django Google Maps API v3 and Static Maps API helper app
http://django-gmapi.googlecode.com/

django-gmapi-1.0.1 のダウンロードとインストール。
sample_project のダウンロードとDjangoのプロジェクトフォルダへの設置をします。

サンプルプロジェクトの「gmapitest」でdjangoを起動します。
下記のエラーが表示されます。
SyntaxError at /

invalid syntax (maps.py, line 129)

Request Method:  GET
Request URL:  http://hogehost:8000/
Django Version:  1.3
Exception Type:  SyntaxError
Exception Value:  

invalid syntax (maps.py, line 129)

Exception Location:  /path/to/django/gmapitest/myapp/views.py in ?, line 3
調べてみると、現在のPython 2.4.3では動かないようです。
Python 2.6.7を別にインストールします。

別にインストールをしたPython 2.6.7で再度djangoをインストールします。
インストールの確認をします。
$ python2.6.7
Python 2.6.7 (r267:88850, Oct  8 2011, 17:43:16)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-48)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION
(1, 3, 0, 'final', 0)
django-gmapi-1.0.1 をPython 2.6.7でインストールした後
再度、サンプルプロジェクトの「gmapitest」で、Python 2.6.7を使ってdjangoを起動します。
Google mapの表示を確認できました。


地図表示のポイントとなるのは、/path/to/django/gmapitest/myapp/views.py になります。この中のindexの内容を基に修正、機能を作っていけばよさそうです。
# -*- coding: utf-8 -*-
from django import forms
from django.shortcuts import render_to_response
from gmapi import maps
from gmapi.forms.widgets import GoogleMap


class MapForm(forms.Form):
    map = forms.Field(widget=GoogleMap(attrs={'width':900, 'height':600}))


def index(request):
    gmap = maps.Map(opts = {
        'center': maps.LatLng(34.687428,133.916473),
        'mapTypeId': maps.MapTypeId.ROADMAP,
        'zoom': 13,
        'mapTypeControlOptions': {
             'style': maps.MapTypeControlStyle.DROPDOWN_MENU
        },
    })
    marker = maps.Marker(opts = {
        'map': gmap,
        'position': maps.LatLng(34.687428,133.916473),
    })
    maps.event.addListener(marker, 'mouseover', 'myobj.markerOver')
    maps.event.addListener(marker, 'mouseout', 'myobj.markerOut')
    info = maps.InfoWindow({
        'content': 'Hello! 岡山の地図',
        'disableAutoPan': True
    })
    info.open(gmap, marker)
    context = {'form': MapForm(initial={'map': gmap})}
    return render_to_response('index.html', context)

2011/10/06

さくらVPSにDjango1.3(PostgerSQL使用)をインストールしました。開発用のサーバでCSSが有効になるまでの手順の続きです。



前回の続きです。DjangoアプリPollのチュートリアルの内容で、開発用サーバでCSSが有効になる方法のまとめです。


はじめての Django アプリ作成、その 3
http://djangoproject.jp/doc/ja/1.0/intro/tutorial03.html

公開用のインタフェース、ビュー(view) の作成をする際、サンプルのままだと、CSSの効いていない画面しか表示されません。


CSSの効いた画面を表示したいと思った時、どうすればよいか分かりませんでした。実際に公開する際は、静的なファイルはApacheで提供するようになりますが、開発用のサーバで、CSSを有効にするには、どうすればいいのでしょうか。

Googleで色々と調べて、下記の設定で、開発用サーバでCSSが有効になることが分かりました。


/path/to/django/mysite/setting.py の該当部分
MEDIA_ROOT = os.path.join(os.path.abspath(os.path.dirname(__file__)), 'media')
MEDIA_URL = '/m/'
/path/to/django/mysite/urls.py
from django.conf.urls.defaults import *
from mysite import settings

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',

    (r'^polls/$', 'mysite.polls.views.index'),
    (r'^polls/(?P\d+)/$', 'mysite.polls.views.detail'),
    (r'^polls/(?P\d+)/results/$', 'mysite.polls.views.results'),
    (r'^polls/(?P\d+)/vote/$', 'mysite.polls.views.vote'),

    url(r'^admin/', include(admin.site.urls)),
)

if settings.DEBUG:
    urlpatterns += patterns('',
        (r'^m/(?P.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}),
    )
/path/to/django/mysite/templates/polls/index.html


2011/10/04

さくらVPSにDjango1.3(PostgerSQL使用)をインストールしました。開発用のサーバでCSSが有効になるまでの手順をまとめておきます。



さくらVPSにて、Django1.3で開発サーバを起動し、アプリを作成する際、テンプレートからCSSが参照できませんでした。しばらく調べて解決したので、備忘録として記録しておきます。


さくらのVPSに入っているPythonは、2.4.3です。
Python 2.4.3 (#1, May  5 2011, 16:39:10)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
Django1.3をインストールします。
$ wget http://www.djangoproject.com/download/1.3/tarball/
$ tar vxzf Django-1.3.tgz
$ cd Django-1.3
$ sudo python setup.py install
Django1.3がインストールされたことを確認します。
Python 2.4.3 (#1, May  5 2011, 16:39:10)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VIRSION
(1, 3, 0, 'final', 0)
PostGreSQLをインストールします。
# yum install postgresql-server postgresql postgresql-libs postgresql-devel
postgresql8.1.23-1がインストールされました。 PostgreSQL関係の操作をpostgresユーザで行います。
{user} su -
{root} su - postgres
{postgres}
データベースを初期化します。
{postgres}$ initdb --encoding=UTF8 --no-locale
・・・
Success. You can now start the database server using:
    postmaster -D /var/lib/pgsql/data
or
    pg_ctl -D /var/lib/pgsql/data -l logfile start
サーバプロセスの起動と停止のコマンドです。
{postgres}$ pg_ctl -w start  // 起動処理終了後プロンプトに戻る
{postgres}$ pg_ctl stop    // サーバプロセスの停止
ユーザーを作成します。
{postgres}$ createuser hoge
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n
CREATE ROLE
psqlでデータベースに接続します。
$ psql postgres hoge
Welcome to psql 8.1.23, the PostgreSQL interactive terminal.
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit
postgres=>
$ psql template1 hoge
Welcome to psql 8.1.23, the PostgreSQL interactive terminal.
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit
template1=>
終了するには、\qコマンドを実行します。
PostGreSQLに用意されているテンプレート用のデータベース「template1」を使います。

パスワードを設定します。
$ psql
Welcome to psql 8.1.23, the PostgreSQL interactive terminal.
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit
postgres=# alter user hoge password '**********';
ALTER ROLE
postgres=# \q
PostgerSQLとPythonの接続をします。
psycopg2のインストール
$ wget http://initd.org/psycopg/tarballs/PSYCOPG-2-4/psycopg2-2.4.2.tar.gz
$ tar vxzf psycopg2-2.4.2.tar.gz
$ cd psycopg2-2.4.2
# python setup.py build
# python setup.py install
はじめての Django アプリ作成の内容を元にアプリを作成していきます。

はじめての Django アプリ作成
http://djangoproject.jp/doc/ja/1.0/intro/tutorial01.html#intro-tutorial01

Djangoのプロジェクトを作成します。
/path/to/django/にて
$ django-admin.py startproject mysite
Djangoアプリケーションを作成します。
/path/to/django/mysite/にて
$ python manage.py startapp polls
重要な設定箇所だけを記載します。
/path/to/django/mysite/settings.pyを編集
DATABASES = {
    'default': {
        'ENGINE': 'postgresql_psycopg2',
        'NAME': 'template1',
        'USER': 'hoge',
        'PASSWORD': '*************',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'django.contrib.admin',
    'django.contrib.admindocs',
    'mysite.polls'
)
/path/to/django/mysite/polls/models.pyを編集
from django.db import models
class Poll(models.Model):
    question = models.CharField(max_length=200)
    pub_date = models.DateTimeField('date published')
class Choice(models.Model):
    poll = models.ForeignKey(Poll)
    choice = models.CharField(max_length=200)
    votes = models.IntegerField()
admin サイトの有効化
/path/to/django/mysite/urls.pyを編集
from django.conf.urls.defaults import patterns, include, url
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
    url(r'^admin/', include(admin.site.urls)),
)
モデルテーブルをデータベース上に作成します。
/path/to/django/mysiteにて
$ python manage.py syncdb
Djangoを起動
/path/to/django/mysiteにて
$ python manage.py runserver 0.0.0.0:8080
管理画面へのアクセスを確認。

次回へ続く。

2011/02/07

Google Map API helper app for Djangoが、まだまだ動きません。



Google Map API helper app for Djangoを確認したいのですが、まだまだ動作しません。


Google Map API helper app for Django
http://code.djangoproject.com/wiki/django-gmap

ソースを下記よりダウンロードして
http://django-googlemap.googlecode.com/svn/trunk/

Installの項目を作業を行い
  1. add googlemap application in a django project
  2. edit googlemap/settings.py: set SECRET_KEY (get a key at http://code.google.com/apis/maps/signup.html)
  3. import googlemap/settings.py in the main settings.py: from googlemap.settings import *
  4. add googlemap urls: (r'^mysite/gmap/', include('mysite.googlemap.urls')),

carpoolの階層で python manage.py runserver を行うと
Error: Can't find the file 'settings.py' in the directory containing 'manage.py'.
 It appears you've customized things.
You'll have to run django-admin.py, passing it your settings module.
(If the file settings.py does indeed exist, it's causing an ImportError somehow.)
と言われます。


settings.pyの内容を確認するために python settings.py を行うと
Traceback (most recent call last):
  File "settings.py", line 91, in <module>
    from geo.googlemap.settings import *
  File "/<path-to-django>/carpool/geo/googlemap/settings.py", line 6, in <module>
    from settings_local import *
ImportError: No module named settings_local
と言われます。

settings_local.py って何ですか?
そもそも、Google Map API helper app for Djangoは1.24では動かないのでしょうか?

2011/02/06

書籍「Python フレームワーク」のDjangoのBlogチュートリアルをやってみました。



Google Map API helper app for Djangoを利用してみたかったのですが、helperの使い方が良く分かっていないようです。Djangoの仕組みの細部まで理解するには、「Djangoドキュメント」が大変分かりやすいのですが、それでも、何かアプリを作成するチュートリアルの方が、ひとつずつ作業をしながら確認が出来るので、さらに分かりやすいです。

Google Map API helper app for Django
http://code.djangoproject.com/wiki/django-gmap

Django ドキュメント
http://djangoproject.jp/doc/ja/1.0/

「Python フレームワーク Django と TurboGears で実現する Web 2.0プログラミング」という本のDjangoのBlogチュートリアルをやってみました。チュートリアルの内容と、Django ドキュメントを交互に参照をしながら進めると、理解が深まりました。

ブログのトップページ
記事のページ
記事へのコメントページ

このブログチュートリアル、画面デザインは二の次でかまわないのですが、もう少し気を使ってもいいのかなと思います。

この本が執筆された頃のDjangoはバージョンが低いので(おそらく0.96)、現在の1.24とは仕様が違っているところが幾つかありました。

simpleblog/dblog/modles.py Admin画面用の下記の記載は不要です。替わりに下記の記載を追加します。
"""Empty class enables the Django admin web interface"""
class Admin:
  pass

"""Empty class enables the Django admin web interface"""
class Admin:
  pass
この記載を追加しました。
from django.contrib import admin

class BlogAdmin(admin.ModelAdmin):
  fieldsets = [
    (None,{'fields': ['title','post_date','reply_to']}),
    ('Contents', {'fields': ['content']}),
  ]

admin.site.register(Blog, BlogAdmin)
admin.site.register(Comment)
simpleblog/setting.py は下記の記載でないと動作しません。
MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.middleware.csrf.CsrfResponseMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
)
Djangoの開発用のサーバは、サーバの状況をモニタしてくれます。

サーバのステータスによって、ログの文字色を変えて表示してくれます。404の場合は黄色、200の場合は白、301は緑、304は青、といった具合に表示をしてくれます。


2011/01/22

Google Map API helper app for Djangoを使ってみたいので、再度Djangoをチュートリアルからやってみます。その5(もうちょっと寄り道編)



寛平さんの世界4万km走破でのゴール、サッカー「アジアカップ」のカタール戦の3-2の逆転勝利と、今日はよくテレビを観ていました。テレビを横目に観ながら、「Google Map API helper app for Djangoを使ってみたいので、再度Djangoをチュートリアルからやってみます。」の続きをやっていました。



以前のVineの環境で動作確認をしていたとこまでは、問題なく進めると思っていたのですが、新しいFedoraの環境で
> manage.py syncdb
をすると、下記のエラーが表示されました。
django.core.exceptions.ImproperlyConfigured: Error loading pysqlite2 module: No module named pysqlite2
pysqlite2と、そもそもsqlite3が入っていないようです。

pysqlite2
http://pysqlite.googlecode.com/files/pysqlite-2.5.5.tar.gz

sqlite3
http://sqlite.org/sqlite-autoconf-3070400.tar.gz

pysqlite2とsqlite3のファイルを用意して

はまったところ/pysqliteのインストール
http://goo.gl/cS2w4

の記載を参考にして作業をしてみたのですが、エラーは解消されませんでした。

あとで考えてみると、./configureのパスの指定が、間違っていたのかもしれません。sqlite3とpysqlite2をインストールしたのち、再度、python2.4を入れれば、解消していたのかも知れません。

その時は、煮詰まっていて、Pythonのバージョンを上げるぐらいしか思いつきませんでした。pysqlite2が含まれているPython2.6をソースから入れました。
python
Python 2.6 (r26:66714, Jan 21 2011, 22:45:50)
[GCC 3.4.4 20050721 (Red Hat 3.4.4-2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
その後、sqlite3をインストールしたのですが、今度は、
No module named _sqlite3
と言われました。

sqlite3をインストールして、その後、Python2.6を入れ直して、やっと不具合が解消しました。

2011/01/20

Google Map API helper app for Djangoを使ってみたいので、再度Djangoをチュートリアルからやってみます。その4(寄り道編)



「Google Map API helper app for Djangoを使ってみたいので、再度Djangoをチュートリアルからやってみます。」の続きです。



Vineを動かしていたサーバが逝ってしまったので、その中で動かしていたDjangoも使えなくなりました。新しいFedoraのサーバでDjangoの環境を用意します。このFedoraに入っているPythonのバージョンは、Python2.3.4でした。検証を続けてきたDjango-1.2.4は、Python2.4が必要なのでインストールをします。

ソースから入れるよりは、できればパッケージからインストールをしたいので、探してみました。

Linux RPMs for Python 2.4
http://www.python.org/download/releases/2.4/rpms/

RPMのパッケージがありました。インストールします。
$ wget http://www.python.org/ftp/python/2.4/rpms/fedora-3/python2.4-2.4-1pydotorg.i386.rp
$ sudo rpm -ivh python2.4-2.4-1pydotorg.i386.rpm
$ wget http://www.python.org/ftp/python/2.4/rpms/fedora-3/python2.4-devel-2.4-1pydotorg.i386.rpm
$ sudo rpm -ivh python2.4-devel-2.4-1pydotorg.i386.rpm
Django-1.2.4もインストールをしてから、それぞれのバージョンを確認します。
$ python
Python 2.4 (#1, Nov 30 2004, 11:25:14)
[GCC 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION
(1, 2, 4, 'final', 0)
次から、本筋に戻ります。

2011/01/13

Google Map API helper app for Djangoを使ってみたいので、再度Djangoをチュートリアルからやってみます。その3



「Google Map API helper app for Djangoを使ってみたいので、再度Djangoをチュートリアルからやってみます。」の続きです。



Djangoチュートリアル(後編)の残りの部分です。


Djangoチュートリアル(後編)
http://codezine.jp/article/detail/4264

残りの大きなトピックスは、「HTTPセッションの使用」と「キャッシュシステム」です。どちらも記載どおりにすれば動きました。


「キャッシュシステム」のところで、File Systemを保存先に設定した場合の説明がされていますが、「memcachedの使用が、パフォーマンス面で最も推奨される方式である。」と記載されているので、memcachedでの設定を確認してみました。

使用しているOSがVineなので、必要なものを下記の方法でインストールします。
# apt-get install memcached
# wget ftp://ftp.tummy.com/pub/python-memcached/python-memcached-1.47.tar.gz
# tar vxzf python-memcached-1.47.tar.gz
# cd python-memcached-1.47
# python setup.py install
これで、settings.py に下記の追加すれば、memcachedをキャッシュ保存先に指定してDjangoが起動出来ました。
CACHE_BACKEND='memcached://127.0.0.1:11211/'

2011/01/11

Google Map API helper app for Djangoを使ってみたいので、再度Djangoをチュートリアルからやってみます。その2



「Google Map API helper app for Djangoを使ってみたいので、再度Djangoをチュートリアルからやってみます。その1」 の続きです。

Google Map API helper app for Djangoを使ってみたいので、再度Djangoをチュートリアルからやってみます。その1
http://goo.gl/JczuS


Djangoチュートリアル(後編)
http://codezine.jp/article/detail/4264

このチュートリアルの当時のDjangoのバージョンと、現在、検証をしているバージョン Django1.2.4 の違いのせいだと思いますが、このチュートリアルどおりでは動かない箇所がいくつかありました。

「管理インターフェイスにItemモデルを追加する」の箇所

「管理インターフェイスログイン後の画面でブラウザをリロードしてみましょう(開発サーバの再起動は必要ありません)」とありましたが、サーバを再起動しなければ、反映されませんでした。

「Formの使用」の箇所

views.pyに読み込みを追加するモジュールが幾つか必要でした。不要なモジュールも混じっていますが、このリストの読み込みで動作しました。
from django.http import HttpResponse
from django.http import HttpRequest
from django.template import Context, loader
from models import Item
from django.http import Http404
from django.shortcuts import get_object_or_404
from django.views.generic.simple import direct_to_template
from forms import ItemSearchForm
settings.pyにミドルウェアの指定の追加が必要でした。
MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.middleware.csrf.CsrfResponseMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware',
)
settings.pyのMIDDLEWARE_CLASSESが、上記の指定でないと、検索実行時に
CSRF verification failed. Request aborted
のエラーが表示されました。上記のソースの変更をすると、正常に検索の動作確認が出来ました。

2010/12/23

Google Map API helper app for Djangoを使ってみたいので、再度Djangoをチュートリアルからやってみます。その1



Google Map API helper app for Djangoを使ってGoogle Mapsアプリを作ってみたいので、再度Djangoをチュートリアルからやってみます。

Google Map API helper app for Django
http://code.djangoproject.com/wiki/django-gmap


自宅内のLinux(Vine)サーバに現在に最新のDjango安定版をインストールします。

Djangoチュートリアル(前編)
http://codezine.jp/article/detail/4065
の内容をやりながら思い出します。


How to get Django
http://www.djangoproject.com/download/
より、Django-1.2.4.tar.gzをダウンロードしてインストール。


インストールされたことを確認します。
$ python
Python 2.4.4 (#1, Apr 25 2008, 09:54:36)
[GCC 3.3.6 release (Vine Linux 3.3.6-0vl7)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>> django.VERSION
(1, 2, 4, 'final', 0)

Django-1.2.4は、Python 2.4系でも動作するとのことで、これで行きます。

任意の階層にてDjangoプロジェクトを作成します。
$ django-admin.py startproject gmap

必要なファイルが一式生成されます。
$ cd gmap/
$ ls
__init__.py  manage.py  settings.py  urls.py

開発サーバの起動し動作確認をします。
$ ./manage.py runserver
-bash: ./manage.py: 許可がありません

「許可がありません」とエラーが出ます。

所有者の実行権限を加えます。
$ chmod u+x manage.py

再度、開発サーバの起動し動作確認をします。
$ ./manage.py runserver
Validating models...
0 errors found

Django version 1.2.4, using settings 'gmap.settings'
Development server is running at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

この状態で、家庭内の他のパソコンから、サーバの指定のポートにアクセスします。しかし、アクセスできません。

manage.py runserver にオプションとして、IPを指定しない (0.0.0.0 を使う)ことによって、ローカル以外からも接続可能になります。

再度、開発サーバの起動し動作確認をします。
$ ./manage.py runserver 0.0.0.0:8000
Validating models...
0 errors found

Django version 1.2.4, using settings 'gmap.settings'
Development server is running at http://0.0.0.0:8000/
Quit the server with CONTROL-C.
[23/Dec/2010 03:32:22] "GET / HTTP/1.1" 200 2047

再度、ローカル以外でのパソコンでアクセスをすると


アクセス出来ました。

ここで作成したソースを一式 Subversionに登録しておきます。登録したソースをチェックアウトして再開。

setting.pyの編集(SQLiteを使う設定)
DATABASES = {
    'default': {
        'ENGINE': 'sqlite3',
        'NAME': 'gmap.sqlite',
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    }
}

TIME_ZONE = 'Asia/Tokyo'
LANGUAGE_CODE = 'ja'

DjangoプロジェクトのDB初期化をします。
$./manage.py syncdb

Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (Leave blank to use 'hoge'): hoge
E-mail address: hoge@gmail.com
Password:
Password (again):
Superuser created successfully.
Installing index for auth.Permission model
Installing index for auth.Group_permissions model
Installing index for auth.User_user_permissions model
Installing index for auth.User_groups model
Installing index for auth.Message model
No fixtures found.

manage.pyからのDB接続をして内容の確認
$./manage.py dbshell
SQLite version 3.3.6
Enter ".help" for instructions

実行したSQLの内容を参照できます。
sqlite> .dump
BEGIN TRANSACTION;
CREATE TABLE "auth_permission" (
    "id" integer NOT NULL PRIMARY KEY,
    "name" varchar(50) NOT NULL,
    "content_type_id" integer NOT NULL,
    "codename" varchar(100) NOT NULL,
    UNIQUE ("content_type_id", "codename")
);
INSERT INTO "auth_permission" VALUES(1, 'Can add permission', 1, 'add_permission');
INSERT INTO "auth_permission" VALUES(2, 'Can change permission', 1, 'change_permission');
INSERT INTO "auth_permission" VALUES(3, 'Can delete permission', 1, 'delete_permission');
INSERT INTO "auth_permission" VALUES(4, 'Can add group', 2, 'add_group');
INSERT INTO "auth_permission" VALUES(5, 'Can change group', 2, 'change_group');
INSERT INTO "auth_permission" VALUES(6, 'Can delete group', 2, 'delete_group');
INSERT INTO "auth_permission" VALUES(7, 'Can add user', 3, 'add_user');
INSERT INTO "auth_permission" VALUES(8, 'Can change user', 3, 'change_user');
INSERT INTO "auth_permission" VALUES(9, 'Can delete user', 3, 'delete_user');
INSERT INTO "auth_permission" VALUES(10, 'Can add message', 4, 'add_message');
INSERT INTO "auth_permission" VALUES(11, 'Can change message', 4, 'change_message');
INSERT INTO "auth_permission" VALUES(12, 'Can delete message', 4, 'delete_message');
INSERT INTO "auth_permission" VALUES(13, 'Can add content type', 5, 'add_contenttype');
INSERT INTO "auth_permission" VALUES(14, 'Can change content type', 5, 'change_contenttype');
INSERT INTO "auth_permission" VALUES(15, 'Can delete content type', 5, 'delete_contenttype');
INSERT INTO "auth_permission" VALUES(16, 'Can add session', 6, 'add_session');
INSERT INTO "auth_permission" VALUES(17, 'Can change session', 6, 'change_session');
INSERT INTO "auth_permission" VALUES(18, 'Can delete session', 6, 'delete_session');
INSERT INTO "auth_permission" VALUES(19, 'Can add site', 7, 'add_site');
INSERT INTO "auth_permission" VALUES(20, 'Can change site', 7, 'change_site');
INSERT INTO "auth_permission" VALUES(21, 'Can delete site', 7, 'delete_site');
CREATE TABLE "auth_group_permissions" (
    "id" integer NOT NULL PRIMARY KEY,
    "group_id" integer NOT NULL,
    "permission_id" integer NOT NULL REFERENCES "auth_permission" ("id"),
    UNIQUE ("group_id", "permission_id")
);
CREATE TABLE "auth_group" (
    "id" integer NOT NULL PRIMARY KEY,
    "name" varchar(80) NOT NULL UNIQUE
);
CREATE TABLE "auth_user_user_permissions" (
    "id" integer NOT NULL PRIMARY KEY,
    "user_id" integer NOT NULL,
    "permission_id" integer NOT NULL REFERENCES "auth_permission" ("id"),
    UNIQUE ("user_id", "permission_id")
);
CREATE TABLE "auth_user_groups" (
    "id" integer NOT NULL PRIMARY KEY,
    "user_id" integer NOT NULL,
    "group_id" integer NOT NULL REFERENCES "auth_group" ("id"),
    UNIQUE ("user_id", "group_id")
);
CREATE TABLE "auth_user" (
    "id" integer NOT NULL PRIMARY KEY,
    "username" varchar(30) NOT NULL UNIQUE,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL,
    "email" varchar(75) NOT NULL,
    "password" varchar(128) NOT NULL,
    "is_staff" bool NOT NULL,
    "is_active" bool NOT NULL,
    "is_superuser" bool NOT NULL,
    "last_login" datetime NOT NULL,
    "date_joined" datetime NOT NULL
);
INSERT INTO "auth_user" VALUES(1, 'hoge', '', '', 'hoge@gmail.com', 'sha1$**********************************', 1, 1, 1, '2010-12-23 19:39:45.831076', '2010-12-23 19:39:45.831076');
CREATE TABLE "auth_message" (
    "id" integer NOT NULL PRIMARY KEY,
    "user_id" integer NOT NULL REFERENCES "auth_user" ("id"),
    "message" text NOT NULL
);
CREATE TABLE "django_content_type" (
    "id" integer NOT NULL PRIMARY KEY,
    "name" varchar(100) NOT NULL,
    "app_label" varchar(100) NOT NULL,
    "model" varchar(100) NOT NULL,
    UNIQUE ("app_label", "model")
);
INSERT INTO "django_content_type" VALUES(1, 'permission', 'auth', 'permission');
INSERT INTO "django_content_type" VALUES(2, 'group', 'auth', 'group');
INSERT INTO "django_content_type" VALUES(3, 'user', 'auth', 'user');
INSERT INTO "django_content_type" VALUES(4, 'message', 'auth', 'message');
INSERT INTO "django_content_type" VALUES(5, 'content type', 'contenttypes', 'contenttype');
INSERT INTO "django_content_type" VALUES(6, 'session', 'sessions', 'session');
INSERT INTO "django_content_type" VALUES(7, 'site', 'sites', 'site');
CREATE TABLE "django_session" (
    "session_key" varchar(40) NOT NULL PRIMARY KEY,
    "session_data" text NOT NULL,
    "expire_date" datetime NOT NULL
);
CREATE TABLE "django_site" (
    "id" integer NOT NULL PRIMARY KEY,
    "domain" varchar(100) NOT NULL,
    "name" varchar(50) NOT NULL
);
INSERT INTO "django_site" VALUES(1, 'example.com', 'example.com');
CREATE INDEX "auth_permission_1bb8f392" ON "auth_permission" ("content_type_id");
CREATE INDEX "auth_group_permissions_425ae3c4" ON "auth_group_permissions" ("group_id");
CREATE INDEX "auth_group_permissions_1e014c8f" ON "auth_group_permissions" ("permission_id");
CREATE INDEX "auth_user_user_permissions_403f60f" ON "auth_user_user_permissions" ("user_id");
CREATE INDEX "auth_user_user_permissions_1e014c8f" ON "auth_user_user_permissions" ("permission_id");
CREATE INDEX "auth_user_groups_403f60f" ON "auth_user_groups" ("user_id");
CREATE INDEX "auth_user_groups_425ae3c4" ON "auth_user_groups" ("group_id");
CREATE INDEX "auth_message_403f60f" ON "auth_message" ("user_id");
COMMIT;

今日はここまで、次回へ続く

人気の投稿 (過去 30 日間)