メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2011年3月18日金曜日

[Python][django] チュートリアルメモ6(debian lenny)

チュートリアルに従ってごちゃごちゃいじってると、、、

TemplateSyntaxErrorが起きる。

Caught an exception while rendering: coercing to Unicode: need string or buffer, long found

と言われる。

modelsの__unicode__でチュートリアルどおりやると


def __unicode__(self):
return self.id
 

と書くことになるけど、django側で表示しようとする際に
__unicode__を呼んでunicode型のものを取得しようとするんだけど
self.idってInteger型なんでunicode型ではないものを返してしまうと。

だもんで、unicode型に変換して返すんだって。

ということで、

def __unicode__(self):
return u"%s" % self.id
 

とすることで回避。
正しいかどうかは知らない。

.

[Python][django] チュートリアルメモ5(debian lenny)

adminページをカスタマイズするチュートリアルやった。

settings.pyのTEMPLATE_DIRに自分のテンプレート置き場を指定し、
Debian Lennyだと


/usr/share/python-support/python-django/django/contrib/admin/templates/
 

あたりに元テンプレートがあるので、コピーして使えって書いてある。

appppp/admin.pyで管理画面での入力項目の出し方なんてのを
カスタマイズできる。
fieldsetsを使えば、複数の項目をグルーピングして表示できるし、
classesにcollapseを指定すると表示/非表示を切り替えるリンクがついて
表示/非表示を切り替えたりできると。

class BoyoyonAdmin(admin.ModelAdmin):
fieldsets = [
(None, {'fields': ['abc']}),
('ああああ', {'fields': ['aaa','bbb'], 'classes': ['collapse']}),
]
 

な感じ。
上記だと"ああああ"というタイトルで、項目aaaと項目bbbが一括りで表示され、さらに非表示/表示リンクがつく。

あ、ちなみに'ああああ'って使ってるけどもちろん

# -*- coding: utf-8 -*-
 

って書いてます。


さて、次はPart3に突入。

.

[Python][django] チュートリアルメモ4(debian lenny)

さんざんデータベースAPIと戯れた!

のでチュートリアル2に突入。

あ、ちなみにチュートリアルはいつものdocディレクトリにあるのを見てます。


$ w3m file:///usr/share/doc/python-django/html/index.html
 

って感じで。
で今
Tutorial: Writing your first Django application

Part2に来たところ。

Admin機能を有効にすっぺ
settings.pyのINSTALLED_APPSにdjango.contrib.adminを追加っと。

で、python manage.py syncdbをべーん。

INSTALLED_APPSに追加したらsyncdbしなきゃいけないんだってさ。

んで、urls.pyのコメントになっている以下の部分のコメントをはずす。

from django.contrib import admin
admin.autodiscover()
 

という部分と

(r'^admin/(.*)', admin.site.root),
 

という部分。
コメント外したらサーバ実行。

$ python manage.py runserver
 


http://127.0.0.1:8000/
にアクセス!

管理画面が表示された。

が、早速パスワード忘れた。。。
チュートリアルPart1で登録したらしい。。。
あれ?そうだっけ?

ので、mysql -uroot してdrop database test;して
create database test;して再度

$ python manage.py syncdb
 

初めてsyncdbするときにスーパーユーザとパスワード登録するので
今度は覚えておくよ。

で、ログイン。
おお、ログインできた!

今apppppのmodels.pyは以下な感じ。

# -*- coding: utf-8 -*-
from django.db import models

# Create your models here.
class Boyoyon(models.Model):
abc = models.TextField(max_length=20)
 

で次は自分で作ったapppppというappのBoyoyonを管理画面で操作できるよにしてみる。
そのためにはadmin.pyというファイルをapppppディレクトリの下に作るらしい。
admin.pyの内容は以下のとおり。

from boyoyon.appppp.models import Boyoyon
from django.contrib import admin

admin.site.register(Boyoyon)
 

で、サーバ再起動。
すると管理画面にBoyoyonが現れる。
Boyoyonをクリックすると、、、、Boyoyonの1レコードを編集することができる。
TextFieldで作ったらTextField用のinputフォームに、
CharFieldで作ったらCharField用のinputフォームになる。へぇー。

で、次はこの管理画面のBoyoyonフォームのカスタマイズらしい。
.

2011年3月17日木曜日

[Python][django] チュートリアルメモ3(debian lenny)

モデルを有効にする



$ cd boyoyon
$ vi settings.py
 

ってやってsettings.pyを編集。

INSTALLED_APPSって書いてあるところにモデルを追加。

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
)
 

ってなってるんで、そこにboyoyon.apppppを追加。

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'boyoyon.appppp',
)
 

これで有効になったかしら。
ということで以下のコマンドを実行。

$ python manage.py sql appppp
 

すると、、、

Error: Django doesn't know which syntax to use for your SQL statements,
because you haven't specified the DATABASE_ENGINE setting.
Edit your settings file and change DATABASE_ENGINE to something like 'postgresql' or 'mysql'.
 

って言われた。
DATABASEの設定しないとダメみたい。

早速DBの設定。
settings.pyをひらいて、、、

DATABASE_ENGINE = '' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = '' # Or path to database file if using sqlite3.
DATABASE_USER = '' # Not used with sqlite3.
DATABASE_PASSWORD = '' # Not used with sqlite3.
DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
 

ってところを環境に合わせて設定。

自分の環境は以下の感じ。

DATABASE_ENGINE = 'mysql' # 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
DATABASE_NAME = 'test' # Or path to database file if using sqlite3.
DATABASE_USER = 'root' # Not used with sqlite3.
DATABASE_PASSWORD = '' # Not used with sqlite3.
DATABASE_HOST = 'localhost' # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = '3306' # Set to empty string for default. Not used with sqlite3.
 

特にmysqlが好きなわけじゃないけどmysqlを指定。
databaseは'test'、ユーザはroot、パスワードなし。

んで、再度sql出力コマンド。

$ python manage.py sql appppp
BEGIN;
CREATE TABLE `appppp_poll` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`question` varchar(200) NOT NULL,
`pub_date` datetime NOT NULL
)
;
CREATE TABLE `appppp_choice` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`poll_id` integer NOT NULL,
`choice` varchar(200) NOT NULL,
`votes` integer NOT NULL
)
;
ALTER TABLE `appppp_choice` ADD CONSTRAINT poll_id_refs_id_9963a93 FOREIGN KEY (`poll_id`) REFERENCES `appppp_poll` (`id`);
COMMIT;
 

おお、SQL文が出力された。。。
idはauto_increment。これ変えたい場合は
なんたらFieldのパラメータにprimary_key=Trueを指定すればいいらしい。

さて、次は実際にDBにテーブルを作る。
syncdbというコマンドを叩くらしい。

$ python manage.py syncdb
Creating table auth_permission
Creating table auth_group
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table appppp_poll
Creating table appppp_choice

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 'konno'):
E-mail address: atkonn@gmail.com
Password:
Password (again):
Error: Blank passwords aren't allowed.
Password:
Password (again):
Superuser created successfully.
Installing index for auth.Permission model
Installing index for auth.Message model
Installing index for appppp.Choice model
 

途中パスワードで怒られた。空パスワードはダメみたい。

どれ、テーブルできたかな。

$ mysql -uroot test
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 231
Server version: 5.0.51a-24+lenny4 (Debian)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

> show tables;
+----------------------------+
| Tables_in_test |
+----------------------------+
| appppp_choice |
| appppp_poll |
| auth_group |
| auth_group_permissions |
| auth_message |
| auth_permission |
| auth_user |
| auth_user_groups |
| auth_user_user_permissions |
| django_content_type |
| django_session |
| django_site |
+----------------------------+
 

っと。
もりっとできた。


次はデータベースAPIと戯れるとのこと。

.

2011年3月16日水曜日

[Python][django] チュートリアルメモ2(debian lenny)

「プロジェクトの作成」が終わったら「モデルの作成」をするらしい。
「プロジェクトの作成」では自分用の環境を構築し、作業をする準備。

モデルの作成


まずはアプリケーションを作るんだとさ。
ということで早速作る。


$ cd boyoyon
$ python manage.py startapp appppp
 

apppppというappを作ってみた。
すると

$ ls -1
__init__.py
__init__.pyc
appppp
manage.py
settings.py
settings.pyc
urls.py
urls.pyc
 

というふうにapppppディレクトリが作成された。
(これだとprojectとappがカップリングされてしまうのでダメらしいんだけどチュートリアルなんで進めるって書いてある。)

apppppディレクトリの中身は・・・

$ ls -1 appppp
__init__.py
models.py
views.py
 

ってなってる。
お、modelsってある!
これがモデルですか??

ちなみにDjangoではDRY則に従うそうな。
models.pyを編集するっす!
vimでひらいて見ると・・・

from django.db import models

# Create your models here.
~

ってだけ書いてある。
チュートリアルに従って・・・


from django.db import models

# Create your models here.
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()
 

と記述、というかコピペ。
内容は良く分からんが、モデル作成完了。

次はモデルを有効にするらしい。

.

[Python][django] チュートリアルメモ1(debian lenny)

djangoのインストールが終わったみたいなので次。

プロジェクトの作成
まずはプロジェクトの作成。djangoのセットアップを行う。


$ django-admin startproject boyoyon
 

とりあえず、チュートリアルに従ってdjango-adminをstartprojectを引数に
実行してみる。
するとあら不思議。

$ ls
boyoyon
 

boyoyonというディレクトリができているではありませんか!

ちなみにdebian lennyでapt-get installしたdjangoなんで"django-admin" というコマンドがインストールされているけども、setup.pyでインストールした場合はどこかにdjango-admin.pyがインストールされる模様。

boyoyonディレクトリの中身は

$ ls -a boyoyon/
. .. __init__.py manage.py settings.py urls.py
 

ってな感じ。


ここまで来たら、プロジェクトなるものが正しく動くか確認するらしい。
早速「開発用サーバ」なるものを動かしてみる。

$ cd boyoyon
$ python manage.py runserver
Validating models...
0 errors found

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

・・・開発サーバが立ち上がった模様。
http://127.0.0.1:8000/にアクセス。



It worked!
Congratulations on your first Django-powered page.

Of course, you haven't actually done any work yet. Here's what to do next:

* If you plan to use a database, edit the DATABASE_* settings in boyoyon/settings.py.
* Start your first app by running python boyoyon/manage.py startapp [appname].

You're seeing this message because you have DEBUG = True in your Django settings file and you haven't configured any URLs. Get to work!
 

なんて書かれてるページが表示される。
It worked!なんて書かれているんで動いてるんだよね、きっと。

ふむふむ、データベース使うならboyoyon/settings.pyのDATABASE_なんたらを編集するのね。
ふむふむ、DEBUG = Trueなのね。


.

[Python][django] djangoが入っているかどうか

djangoがインストールされてるかな?


$ python
Python 2.5.2 (r252:60911, Jan 24 2010, 14:53:14)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named django
>>>
 

だめですsた。


なんでインストール

$ apt-cache search django
cakephp-instaweb - Development webserver for CakePHP applications
python-jinja - small but fast and easy to use stand-alone template engine
python-mako - fast and lightweight templating for the Python platform
libmapnik-dev - C++/Python toolkit for developing GIS applications (devel)
libmapnik0.5 - C++/Python toolkit for developing GIS applications (libraries)
mapnik-utils - C++/Python toolkit for developing GIS applications (utilities)
python-mapnik - C++/Python toolkit for developing GIS applications (Python)
python-django - A high-level Python Web framework
python-jinja2-dbg - small but fast and easy to use stand-alone template engine
python-jinja2 - small but fast and easy to use stand-alone template engine
python-django-debug-toolbar - Embedded debugging toolbar for Django projects
python-django-south - Intelligent schema migrations for django apps
python-django-doc - High-level Python web development framework (documentation)

 

うーん、、、python-djangoでいいのかしらん。


$ sudo apt-get install python-django
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
javascript-common libjs-jquery wwwconfig-common
提案パッケージ:
python-psycopg2 python-psycopg python-flup apache apache-ssl
以下のパッケージが新たにインストールされます:
javascript-common libjs-jquery python-django wwwconfig-common
アップグレード: 0 個、新規インストール: 4 個、削除: 0 個、保留: 140 個。
4795kB のアーカイブを取得する必要があります。
この操作後に追加で 22.8MB のディスク容量が消費されます。
続行しますか [Y/n]? y
取得:1 ftp://ftp.debian.org lenny/main wwwconfig-common 0.1.2 [21.9kB]
取得:2 ftp://ftp.debian.org lenny/main javascript-common 5 [3574B]
取得:3 ftp://ftp.debian.org lenny/main libjs-jquery 1.2.6-2 [62.7kB]
取得:4 ftp://ftp.debian.org lenny/main python-django 1.0.2-1+lenny2 [4707kB]
4795kB を 53s で取得しました (89.0kB/s)
未選択パッケージ wwwconfig-common を選択しています。
(データベースを読み込んでいます ... 現在 483804 個のファイルとディレクトリがインストールさ れています。)
(.../wwwconfig-common_0.1.2_all.deb から) wwwconfig-common を展開しています...
未選択パッケージ javascript-common を選択しています。
(.../javascript-common_5_all.deb から) javascript-common を展開しています...
未選択パッケージ libjs-jquery を選択しています。
(.../libjs-jquery_1.2.6-2_all.deb から) libjs-jquery を展開しています...
未選択パッケージ python-django を選択しています。
(.../python-django_1.0.2-1+lenny2_all.deb から) python-django を展開しています...
man-db のトリガを処理しています ...
wwwconfig-common (0.1.2) を設定しています ...
javascript-common (5) を設定しています ...
libjs-jquery (1.2.6-2) を設定しています ...
python-django (1.0.2-1+lenny2) を設定しています ...
python-support のトリガを処理しています ...
 

で、とりあえずインストール。
javascriptで苦しみまくったわたくしとしましては
libjs-jqueryとか気になります。
それは置いといて


$ python
Python 2.5.2 (r252:60911, Jan 24 2010, 14:53:14)
[GCC 4.3.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import django
>>>
 

お、入ったっぽい。


そんだけ!!!
.