Pythonでアイデアを形にし、色々なWEBサービスを展開しよう。 Pythonでのウェブ開発、開発周辺知識、WEBサービスを立ち上げるための簡単なサーバー系の知識などについて
Tuesday, December 18, 2012
必見 Djangoでよくあるエラー Part1 (SyntaxError Non-ASCII character ... but no encoding declared;)
私も、非常に頻繁に、このエラーに出くわします。
例えば以下の様なエラー
SyntaxError at /persons/
Non-ASCII character '\xe3' in file /programmingpapa/code/papatutorial/persons/views.py on line 4, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details (views.py, line 4)
自分が経験したところでは、これは、ファイルがUTF-8で保存されているのですが、UTF-8 with BOMでは、無いからでした。
エラーが出ているファイルを見つけ、エンコーディングをUTF-8 with BOMに変更して保存してからもう一度試してみてください。
注)基本的にはUTF-8 with BOMをあえて使う必要はないようです。使用されているテキストエディターによると思いますが、もし上記のようなエラーが出るのであればUTF-8 with BOMで保存されてみてください。
結構、こういうところが、DjangoというかPython初心者には突っかかったり、わかりにくいところですよね。
Saturday, December 15, 2012
Webサービスの作り方に関する本の感想
あるときにソフトバンクの孫さんが、大学生の時に一日5分使って毎日色々なアイデアを考え、一年後にその中から一番良いアイデアを選んで、実行に移し、今の成功に至っているというインタビューを読んだことがある。
それに、刺激を受け、自分もよく新しいウェブサービスのアイデアを考えてはメモしている。
ちょうど最近ウェブサービスを作ることに関して自分の興味にマッチする本がちょうどアマゾンで発売されたので、買ってみました。そして、この5日間で読み終えました。
33のエッセイを読むということで、口調が硬くなく、内容もわかり易かったです。
ほかの批評にもありましたが、どのように作るかという技術本はたくさんありますが、何を作るかという点に注目している章もあるのはうれしかったです。私も結構著者である和田さんと似たようなことをしたり考えているんだなと思いました。
コードのサンプルがPerlで書かれていたので、自分には馴染みがない分野でした。
なので、コードは飛ばし読みしました、技術的には難しいことは特に書いてなく、エンジニアの自分にはわかっていることだったので、特に気にはなりませんでした。
自分は仕事でもウェブサービスの立ち上げをしているので、目新しいことはそこまでありませんでしたが、勉強になるてんも幾つかありましたので、買って読んで満足しています。
企画から運用まで広くカバーされています。
僕も将来的には和田さんのようにウェブサービスをたくさん世の中に送り出したいです。
このブログが同じ気持ちを持っている方々の助けと慣れれば幸いです。
注記)上記のリンクを通して本を購入された場合は少額のコミッションがプログラミングパパに支払われます。皆様のご協力に感謝致します。
著者の和田裕介さんについて以下のような記事もありました。
「ひと足先に選ぶ次世代のMVE」株式会社ワディット|和田裕介
小飼弾のアルファギークに逢いたい♥ #21 和田裕介(ゆーすけべー
それに、刺激を受け、自分もよく新しいウェブサービスのアイデアを考えてはメモしている。
ちょうど最近ウェブサービスを作ることに関して自分の興味にマッチする本がちょうどアマゾンで発売されたので、買ってみました。そして、この5日間で読み終えました。
良かった点
33のエッセイを読むということで、口調が硬くなく、内容もわかり易かったです。
ほかの批評にもありましたが、どのように作るかという技術本はたくさんありますが、何を作るかという点に注目している章もあるのはうれしかったです。私も結構著者である和田さんと似たようなことをしたり考えているんだなと思いました。
(個人的に)いまいちだった点
コードのサンプルがPerlで書かれていたので、自分には馴染みがない分野でした。
なので、コードは飛ばし読みしました、技術的には難しいことは特に書いてなく、エンジニアの自分にはわかっていることだったので、特に気にはなりませんでした。
自分は仕事でもウェブサービスの立ち上げをしているので、目新しいことはそこまでありませんでしたが、勉強になるてんも幾つかありましたので、買って読んで満足しています。
企画から運用まで広くカバーされています。
僕も将来的には和田さんのようにウェブサービスをたくさん世の中に送り出したいです。
このブログが同じ気持ちを持っている方々の助けと慣れれば幸いです。
注記)上記のリンクを通して本を購入された場合は少額のコミッションがプログラミングパパに支払われます。皆様のご協力に感謝致します。
著者の和田裕介さんについて以下のような記事もありました。
「ひと足先に選ぶ次世代のMVE」株式会社ワディット|和田裕介
小飼弾のアルファギークに逢いたい♥ #21 和田裕介(ゆーすけべー
Sunday, December 9, 2012
Django実践チュートリアル(サーバー編)DjangoをUbuntu,Apache, mod_wsgiで動かしてみる
Djangoはローカルでの開発環境を作るのはとても楽だったのですが、WEBサービスを作るからにはサーバーでの動かし方を知っていなければ、どうしようもないですよね。
なので、今日は駆け足で、まっさらなUbuntuにApache, mod_wsgi, Djangoという組み合わせでの設定を紹介したいと思います。続編では、mysqlも設定したいと思っています。
まず、私の環境ですとUbuntu12.10をVirtualBoxで動かしています。
このやり方もそのうち、チュートリアルを書きたいとは思っています。
このサーバーはクリーンインストールされた状態でIPアドレスが192.168.0.6であると仮定します。ちなみに、インストール時はOpenSSHサーバーのみを選択したのでLAMPは入れていません。
使用しているサーバー
lsb_release -aでバージョンがわかる。
STEP1 まずは、アップデートをかけます。
STEP2 次にApache, mod_wsgiをインストールします。
STEP3 Pythonで使うツールをインストールします。
STEP5 Djangoプロジェクトの作成とwsgiの設定
Ubuntuには/srvディレクトリがあるので、その下にプロジェクトを作成します
最後まで読んでいただきありがとうございました。
今後も、人気が上がっているPythonについてたくさんの記事を書いていく予定です、
ページの右上からブログに登録していただければ幸いです。
なので、今日は駆け足で、まっさらなUbuntuにApache, mod_wsgi, Djangoという組み合わせでの設定を紹介したいと思います。続編では、mysqlも設定したいと思っています。
まず、私の環境ですとUbuntu12.10をVirtualBoxで動かしています。
このやり方もそのうち、チュートリアルを書きたいとは思っています。
このサーバーはクリーンインストールされた状態でIPアドレスが192.168.0.6であると仮定します。ちなみに、インストール時はOpenSSHサーバーのみを選択したのでLAMPは入れていません。
使用しているサーバー
lsb_release -aでバージョンがわかる。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 12.10
Release: 12.10
Codename: quantal
ちなみに、インストールされているPythonのバージョンは以下のとおり。
Python 2.7.3 (default, Sep 26 2012, 21:51:14)
STEP1 まずは、アップデートをかけます。
$ sudo apt-get update
$ sudo apt-get upgrade
STEP2 次にApache, mod_wsgiをインストールします。
$ sudo apt-get install apache2
$ sudo apt-get install libapache2-mod-wsgi
STEP3 Pythonで使うツールをインストールします。
$ sudo apt-get install python-setuptools
$ sudo apt-get install mysql-server python-mysqldb
$ sudo apt-get install python-pip
STEP4 Djangoをインストール
$ sudo pip install django
STEP5 Djangoプロジェクトの作成とwsgiの設定
Ubuntuには/srvディレクトリがあるので、その下にプロジェクトを作成します
$ sudo mkdir /srv/www
$ cd /srv/www
プロジェクトの作成
$ sudo django-admin.py startproject papa
WSGIの設定をするためにapacheというフォルダを作成し、django.wsgiファイルを以下のように作成します。
$ sudo mkdir /srv/www/papa/apache
$ vi /srv/www/papa/apache/django.wsgi
import os
import sys
#path = '/srv/www'
#if path not in sys.path:
# sys.path.insert(0, '/srv/www')
sys.path.append('/srv/www')
sys.path.append('/srv/www/papa')
os.environ['DJANGO_SETTINGS_MODULE'] = 'papa.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
STEP6 Apacheの設定
以下のようにpapaというファイルをsites-availableに作成し、それを有効化させます。
以下のようにpapaというファイルをsites-availableに作成し、それを有効化させます。
$ sudo vi /etc/apache2/sites-available/papa
<VirtualHost *:80>
ServerName 192.168.0.6
DocumentRoot /srv/www/papa
<Directory /srv/www/papa>
Order allow,deny
Allow from all
</Directory>
WSGIDaemonProcess papa.djangoserver processes=2 threads=15 display-name=%{GROUP}
WSGIProcessGroup papa.djangoserver
WSGIScriptAlias / /srv/www/papa/apache/django.wsgi
</VirtualHost>
設定を有効化
$ sudo a2ensite papa
$ sudo /etc/init.d/apache2 restart
これで、一連のインストールと設定は終了です。
以下のページにアクセス
http://192.168.0.6/
以下のようなサイトが出ていれば成功です。
最後まで読んでいただきありがとうございました。
今後も、人気が上がっているPythonについてたくさんの記事を書いていく予定です、
ページの右上からブログに登録していただければ幸いです。
参照
Thursday, December 6, 2012
Gitでよくする失敗(間違ってファイルを追加してしまった場合)
私がよくやってしまう失敗、自分が次回から忘れないためにも、記録しておきたいと思う。
失敗1 git add .を.gitignoreファイルを作成する前に行なっていまう
なぜこれは、良くないのでしょうか?それは、無視して欲しいファイルやディレクトリを書いた.gitignoreをaddした後に足しても、.gitignore内に書かれているファイルはすでにインデックス化されていて、次のコミットに入ってしまっているから。
さて、場合によっては、git add .で足したファイルをインデックスから削除したくなるでしょう。
そのようなときは、次の失敗2を御覧ください。
教訓
gitのローカルレポジトリを作成して、それから、addする前にかならず.gitignoreは最初から作っておきましょう
失敗 2 フォルダ内のファイルすべてを追加して、追加する必要がないゴミがあることに気がつく
一番最初にgitレポジトリをローカルで作ってから、すべてのファイルを追加して。。。。あっ、余計なものまで追加してしまったと後悔すること。例えば画像ファイルとか。
例
クライアント側では要するに以下のような動作をしてしまう。
cd /programmingpapa/project_folder
git init
git add.
そして、余計な画像ファイルが入っていたとしよう。
調べてみると、追加してしまったファイルを取り除くためには
git resetを使えると見つけた。
なので、
git reset (取り除きたいファイル名)
とやってみると
fatal: Failed to resolve 'HEAD' as a valid ref.
というエラーが出てきた
その理由はというと、一度も未だコミットしていないからのようだ。
その場合は
git rm --cached (取り除きたいファイル名)
とすることで解決することができる
git statusと打って、ファイルがインデックスから取り除かれたことを確認しよう。
もしも、追加したすべてのファイルを取り除きたい場合は
(git add . の反対)以下のコマンドを試してみてください。
git rm -r --cached .
以下のstackoverflowの質疑応答は非常に役に立ちました。
http://stackoverflow.com/questions/348170/undo-git-add-before-commit
Tuesday, December 4, 2012
Django:実践チュートリアル3(管理画面を有効化し使用してみる)
この記事では、管理画面を有効化し、これまでに作成したモデルを操作してみましょう。
現在の構造を振り返ってみると
/programmingpapa/code/papatutorialのフォルダに以下の構造が出来上がっているとおもいます。前回のチュートリアル2ではpersons/models.pyにPersonクラスを書くところまで終わりました。
papaturtorial - manage.py
papatutorial - __init__.py
- settings.py
- urls.py
- wsgi.py
persons - __init__.py
- models.py
- tests.py
- views.py
今は以下の構造ができているはずです。
papaturtorial - manage.py
papatutorial - __init__.py
- settings.py
- urls.py
- wsgi.py
persons - __init__.py
- models.py
- tests.py
- views.py
- admin.py
では、これを記述したら、もう一度サーバーを立ちあげて、ログインしてみます。
Personsが認識されているのがわかりますね。
では、Personsの横のAddをクリックして、データを追加してみましょう。
以下のような画面が出てくるので、項目を入力して、Saveを押下します。
現在の構造を振り返ってみると
/programmingpapa/code/papatutorialのフォルダに以下の構造が出来上がっているとおもいます。前回のチュートリアル2ではpersons/models.pyにPersonクラスを書くところまで終わりました。
papaturtorial - manage.py
papatutorial - __init__.py
- settings.py
- urls.py
- wsgi.py
persons - __init__.py
- models.py
- tests.py
- views.py
では、管理画面を有効化するためには以下のステップを取ります。
- 設定ファイルで管理機能を有効化する
- データベースに管理機能を反映する
- 管理画面にアクセスして動作を確認する
設定ファイルで管理機能を有効化する
以下のファイルに変更をかけます。
- papatutorial/settings.py
- papatutorial/urls.py
papatutorial/settings.pyではINSTALLED_APPS の設定で'django.contrib.admin'を有効にします。
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'persons',
)
papatutorial/urls.pyは以下のように変更します。
from django.conf.urls import patterns, include, url
# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'papatutorial.views.home', name='home'),
# url(r'^papatutorial/', include('papatutorial.foo.urls')),
# Uncomment the admin/doc line below to enable admin documentation:
# url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
)
以下の3行を有効化するだけですね。
from django.contrib import admin
admin.autodiscover()
url(r'^admin/', include(admin.site.urls)),
データベースに管理機能を反映する
データベースに管理画面系のDBを反映させましょう では、実際にMySqlに反映させてみましょう。./manage.py syncdb Creating tables ... Creating table django_admin_log Installing custom SQL ... Installing indexes ... Installed 0 object(s) from 0 fixture(s)
管理画面にアクセスして動作を確認する
では、サーバーを立ちあげて、動作を確認してみましょう サーバーを立ち上げるためには./manage.py runserverというコマンドを打ちます、そうすると、開発用サーバーが http://127.0.0.1:8000/ で起動します。./manage.py runserver Validating models... 0 errors found Django version 1.4.2, using settings 'papatutorial.settings' Development server is running at http://127.0.0.1:8000/http://127.0.0.1:8000/にアクセスすると以下のようなページが出てきます。
早速エラー画面ですが、これは、urls.pyをいじったせいで、管理画面を有効にするURLしか定義していないと言われています。
確かにそうなので、アクセスを、http://127.0.0.1:8000/admin/のURLに対して行います。
そうすると、管理画面にの入り口が見えてきたでしょうか?
最初にプロジェクトを作った時に指定したユーザー名とパスワードを入力します。
忘れてしまった場合は、コンソールからリセットしましょう。方法についてはこちらを参照してください。
さあ、ログインすると以下の様な画面が見えてくるのではないでしょうか?
ここで、ユーザー管理などができます。
コーディングなしで、ここまで生成してくれるのは本当に開発のスピードを上げてくれますよね。管理画面のカスタマイズに関しては、後々また、紹介したいと思います。
今ここで、気がついて欲しいのは、定義したPersonsモデルが無いことです。
これを管理画面に表示させるにはもうひとつ作業しないといけないステップがありました。
以下をadmin.pyというファイルにしてpersonsプロジェクトの中に保存してください。
from django.contrib import adminこれは、管理画面でpersonsプロジェクトのモデルのPersonを表示させるように記しているものです。
from persons.models import Person
admin.site.register(Person)
今は以下の構造ができているはずです。
papaturtorial - manage.py
papatutorial - __init__.py
- settings.py
- urls.py
- wsgi.py
persons - __init__.py
- models.py
- tests.py
- views.py
- admin.py
では、これを記述したら、もう一度サーバーを立ちあげて、ログインしてみます。
Personsが認識されているのがわかりますね。
では、Personsの横のAddをクリックして、データを追加してみましょう。
以下のような画面が出てくるので、項目を入力して、Saveを押下します。
すると、項目が追加されたのが一覧表で以下のようにわかると思います。
ここで、何か気が付かれたでしょうか?試しに、もう一項目データを入力してみて下さい。伊藤花子さんを追加しました。以下のような一覧になります。
問題点が分かって来ましたね。項目がPerson Objectと表示されていて、これでは管理しにくいですね。
では、これを正しましょう。
モデルの定義の__unicode__というメソッドをオーバーライドします。
papatutorial/persons/models.pyを以下のように編集して見ましょう。姓+名が表示されるようになるはずです。
from django.db import models
class Person(models.Model):
first_name = models.CharField(u'名', max_length = 256)
last_name = models.CharField(u'姓', max_length = 256)
first_name_yomi = models.CharField(u'名読み', max_length = 256)
last_name_yomi = models.CharField(u'姓読み', max_length = 256)
email_address = models.EmailField(u'Emailアドレス', max_length = 256) #default max_length is 75
#face = models.FileField('Images', upload_to="images")
def __unicode__(self):
return self.last_name + self.first_name
class Meta:
db_table = 'person'
では、画面をリロードまたは、開発サーバーを建て上げなおして、もう一度Personsの一覧を見てみましょう。
以下のように表示されているでしょうか?
だいぶ見やすくなりましたね。
次回のチュートリアルでは、顔写真のアップを行なってみましょう。
Django:実践チュートリアル2(アプリケーション作成とモデルの作成)
では、名前、Emailアドレス、写真などを記録できる部分を作りたいと思います。
Djangoでは、プロジェクト、そして、アプリケーションという、概念があります。
ここでは、深くは触れません、習うより慣れろですね。
とりあえず、personsというアプリケーションを作りましょう。
/programmingpapa/code/papatutorialのフォルダにターミナルで移動し、以下のコマンドを実行します。
papaturtorial - manage.py
papatutorial - __init__.py
- settings.py
- urls.py
- wsgi.py
persons - __init__.py
- models.py
- tests.py
- views.py
では、persons/models.pyを開いて、モデルを定義します。
欲しい項目としては、
id
first_name (名)
last_name (姓)
first_name_yomi (名読み)
last_name_yomi (姓読み)
email_address (Eメール)
face (顔写真)と行った項目でしょうか。
ちょっと説明が長くなるので顔写真はまた後でやりたいと思います。
良く使われるプライマリキーのIDは自動で作成されるので、
そのほかの項目をmodels.pyに以下の用に定義します。
models.の後にどのような値が可能かに関しては公式ドキュメントを参考にしてください。
英語ですが、モデルのフィールドを書く上での紹介はこちら
そして、モデルに関しての詳しい紹介はこちらです。
もっと、Djangoに詳しくなったら翻訳チームにも参加したいと思っています。
とりあえず、モデルができたので、これをDBに反映させましょう。
まず、このモデルはどんなSQLを生成するのでしょうか?
/programmingpapa/code/papatutorialのフォルダに戻り次のコマンドを実行
と思ったら以下のエラーが帰ってきてしまいました。
papatutorial/papatutorial/settings.pyにpersonsを追加します。
以下のように記述します。
では、もう一度
文字コードに関して文句を言われているようです。
persons/models.pyを開くとちゃんとUTF-8にはなっているのですが、UTF-8, with BOMに変える必要があるみたいです。
再度チャレンジ
すると、こんどは、ちゃんと以下の構造が出来上がると思います。
もう一度コマンドを実行します。
すると、こんどは、ちゃんと以下の構造が出来上がると思います。
では、実際にMySqlに反映させてみましょう。
Creating table personと表示されていますね。これで、データベースが生成されているはずです。では、次のブログポストでは、管理画面を使用して実際にデータを入れていってみましょう。
Djangoでは、プロジェクト、そして、アプリケーションという、概念があります。
ここでは、深くは触れません、習うより慣れろですね。
とりあえず、personsというアプリケーションを作りましょう。
/programmingpapa/code/papatutorialのフォルダにターミナルで移動し、以下のコマンドを実行します。
$ ./manage.py startapp personsすると、以下の構造が出来上がると思います。
papaturtorial - manage.py
papatutorial - __init__.py
- settings.py
- urls.py
- wsgi.py
persons - __init__.py
- models.py
- tests.py
- views.py
では、persons/models.pyを開いて、モデルを定義します。
欲しい項目としては、
id
first_name (名)
last_name (姓)
first_name_yomi (名読み)
last_name_yomi (姓読み)
email_address (Eメール)
face (顔写真)と行った項目でしょうか。
ちょっと説明が長くなるので顔写真はまた後でやりたいと思います。
良く使われるプライマリキーのIDは自動で作成されるので、
そのほかの項目をmodels.pyに以下の用に定義します。
from django.db import models class Person(models.Model): first_name = models.CharField(u'名', max_length = 256) last_name = models.CharField(u'姓', max_length = 256) first_name_yomi = models.CharField(u'名読み', max_length = 256) last_name_yomi = models.CharField(u'姓読み', max_length = 256) email_address = models.EmailField(u'Emailアドレス', max_length = 256) #default max_length is 75 #face = models.FileField('Images', upload_to="images")
models.の後にどのような値が可能かに関しては公式ドキュメントを参考にしてください。
英語ですが、モデルのフィールドを書く上での紹介はこちら
そして、モデルに関しての詳しい紹介はこちらです。
もっと、Djangoに詳しくなったら翻訳チームにも参加したいと思っています。
とりあえず、モデルができたので、これをDBに反映させましょう。
まず、このモデルはどんなSQLを生成するのでしょうか?
/programmingpapa/code/papatutorialのフォルダに戻り次のコマンドを実行
$ ./manage.py sql personsすると、以下の構造が出来上がると思います。
と思ったら以下のエラーが帰ってきてしまいました。
Error: App with label persons could not be found. Are you sure your INSTALLED_APPS setting is correct?はじめに./manage.py startapp personsを実行してpersonsアプリを作ったのですが、それを設定ファイルに記していないので、personsアプリが認識されていないのですね。
papatutorial/papatutorial/settings.pyにpersonsを追加します。
以下のように記述します。
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
# 'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'persons',
)
では、もう一度
$ ./manage.py sql persons私の環境では、またエラーが出てしまいました。
SyntaxError: Non-ASCII character '\xe5' in file /programmingpapa/code/papatutorial/persons/models.py on line 4, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
文字コードに関して文句を言われているようです。
persons/models.pyを開くとちゃんとUTF-8にはなっているのですが、UTF-8, with BOMに変える必要があるみたいです。
再度チャレンジ
$ ./manage.py sql persons
すると、こんどは、ちゃんと以下の構造が出来上がると思います。
BEGIN;
CREATE TABLE `persons_person` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`first_name` varchar(256) NOT NULL,
`last_name` varchar(256) NOT NULL,
`first_name_yomi` varchar(256) NOT NULL,
`last_name_yomi` varchar(256) NOT NULL,
`email_address` varchar(256) NOT NULL
)
;
COMMIT;
生成されるテーブルの命名規則
実際に仕事でプロジェクトを作成するときなどはテーブル名などが指定されていると思います。Djangoでは、デフォルトでは、アプリケーション名_モデル名という規則で、SQL文が作られます。でも、テーブルをモデル名だけで作りたい、または、指定した名前で生成したい場合は、models.pyを以下の用に変更します。from django.db import models from django.db import models class Person(models.Model): first_name = models.CharField(u'名', max_length = 256) last_name = models.CharField(u'姓', max_length = 256) first_name_yomi = models.CharField(u'名読み', max_length = 256) last_name_yomi = models.CharField(u'姓読み', max_length = 256) email_address = models.EmailField(u'Emailアドレス', max_length = 256) #default max_length is 75 #face = models.FileField('Images', upload_to="images") class Meta: db_table = 'person'Metaインナークラスを作成し、db_tableを定義して、そこに、作成したいDBテーブルの名前を記載します。
もう一度コマンドを実行します。
$ ./manage.py sql persons
すると、こんどは、ちゃんと以下の構造が出来上がると思います。
テーブルがpersonで生成されていますね。
BEGIN;
CREATE TABLE `person` (
`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY,
`first_name` varchar(256) NOT NULL,
`last_name` varchar(256) NOT NULL,
`first_name_yomi` varchar(256) NOT NULL,
`last_name_yomi` varchar(256) NOT NULL,
`email_address` varchar(256) NOT NULL
)
;
COMMIT;
では、実際にMySqlに反映させてみましょう。
./manage.py syncdb Creating tables ... Creating table person Installing custom SQL ... Installing indexes ... Installed 0 object(s) from 0 fixture(s)
Creating table personと表示されていますね。これで、データベースが生成されているはずです。では、次のブログポストでは、管理画面を使用して実際にデータを入れていってみましょう。
Labels:
Django,
Django チュートリアル,
Python
Location:
Tokyo, Japan
Django:実践チュートリアル1(プロジェクトの作成とDB連携)
作成したいプロジェクト
とりあえず、実用的な機能を網羅したいので、まずは、PersonとAddressを管理できるシステムを作りたいと思います。
Personにはとりあえず、名前、メールアドレス、そして、顔写真の管理をする。
AddressはPersonに紐付けられており、住所が記載できるようにと考えています。
今後のチュートリアルでは都道府県などを結びつけるなども出来ればと思っています。
プロジェクトをまずは作成してみます。とりあえず、
私の開発環境は
OS: Mountain Lion
Pythonバージョン: Python 2.7.2
まずは、フォルダを以下の用に作り、/programmingpapa/code
以下のコマンドでプロジェクトを作成します。
以下の構造でプロジェクトが作成されているはず。
papaturtorial - manage.py
papatutorial - __init__.py
- settings.py
- urls.py
- wsgi.py
データベースをMySqlに接続するように設定を変更します。
settings.pyの以下の部分を変更します。
私の環境ではmysqlで, データベースを'papatutorialdb'd, rootユーザー、パスワード無しなので以下のようになります。
次に出てくるデータベースとの連携の部分で私の環境ではエラーが出てきたので127.0.0.1にHOSTをしておくことで、問題が回避されました。
それでは、papatutorialフォルダ(/programmingpapa/code/papatutorial)に移りデータベースをシンクロさせましょう。
はじめてなので、管理者を作りますかと聞かれているのでyesと書いてEnter
ユーザーネーム、Email,そして、パスワードを順に聞かれていくので、記入していきます。
終わると、phpMyAdminか何かで、papatutorialdbに色々テーブルができていることが確認できます。以下のテーブルができていました。
ちなみに、auth_userテーブルを覗くと、作成したユーザーがあるはず。
とりあえず、実用的な機能を網羅したいので、まずは、PersonとAddressを管理できるシステムを作りたいと思います。
Personにはとりあえず、名前、メールアドレス、そして、顔写真の管理をする。
AddressはPersonに紐付けられており、住所が記載できるようにと考えています。
今後のチュートリアルでは都道府県などを結びつけるなども出来ればと思っています。
プロジェクトをまずは作成してみます。とりあえず、
私の開発環境は
OS: Mountain Lion
Pythonバージョン: Python 2.7.2
まずは、フォルダを以下の用に作り、/programmingpapa/code
以下のコマンドでプロジェクトを作成します。
$ django-admin.py startproject papatutorial
以下の構造でプロジェクトが作成されているはず。
papaturtorial - manage.py
papatutorial - __init__.py
- settings.py
- urls.py
- wsgi.py
データベースをMySqlに接続するように設定を変更します。
settings.pyの以下の部分を変更します。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': '', # Or path to database file if using sqlite3.
'USER': '', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
私の環境ではmysqlで, データベースを'papatutorialdb'd, rootユーザー、パスワード無しなので以下のようになります。
注目していただきたい変更点はHOST です。デフォルトではlocalhostと書かれていますが、
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'papatutorialdb', # Or path to database file if using sqlite3.
'USER': 'root', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '127.0.0.1', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
次に出てくるデータベースとの連携の部分で私の環境ではエラーが出てきたので127.0.0.1にHOSTをしておくことで、問題が回避されました。
それでは、papatutorialフォルダ(/programmingpapa/code/papatutorial)に移りデータベースをシンクロさせましょう。
$ ./manage.py syncdbするとはじめてなので、以下の様な結果が帰ってきます。
Creating tables ...
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 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と書いてEnter
ユーザーネーム、Email,そして、パスワードを順に聞かれていくので、記入していきます。
終わると、phpMyAdminか何かで、papatutorialdbに色々テーブルができていることが確認できます。以下のテーブルができていました。
auth_group
auth_group_permissions
auth_permission
auth_user
auth_user_groups
auth_user_user_permissions
django_content_type
django_session
django_site
ちなみに、auth_userテーブルを覗くと、作成したユーザーがあるはず。
Monday, December 3, 2012
Djangoを始めよう
Djangoをはじめるには、まず、ソースのダウンロードを本家のサイトからしてきます。
まず、Djangoを習うにあたって参考にした、Djangoのチュートリアルを紹介します。
日本語
Djangoオフィシャルサイトのチュートリアル
よくできていると思いますが、全体像をつかむには内容が少し濃すぎるきがしました。
CodeZineのチュートリアル
非常にわかりやすく、全体像がつかめました。前半を触り、後半は読み飛ばしました。
英語
Djangoオフィシャルサイトの1.4対応チュートリアル
やはり、度々ここに戻ってきます。
WebMonekeyのDjangoチュートリアル
まだ、読んでいませんが、WebMonekyにはよくお世話になっています。
まず、Djangoを習うにあたって参考にした、Djangoのチュートリアルを紹介します。
日本語
Djangoオフィシャルサイトのチュートリアル
よくできていると思いますが、全体像をつかむには内容が少し濃すぎるきがしました。
CodeZineのチュートリアル
非常にわかりやすく、全体像がつかめました。前半を触り、後半は読み飛ばしました。
英語
Djangoオフィシャルサイトの1.4対応チュートリアル
やはり、度々ここに戻ってきます。
WebMonekeyのDjangoチュートリアル
まだ、読んでいませんが、WebMonekyにはよくお世話になっています。
Sunday, December 2, 2012
Web開発で使うフレームワーク
これまで、PHPでは、CakePHPやYiiでウェブ開発を行って来ました。
ですが、どうしてもPythonでウェブ開発を行いたいので、WEB2PYとPyramidはインストールして、試したことがありました。
GoogleAppEngineにも、Pythonで挑戦しましたが、今のところちょっと挫折気味です。
Pythonという言語になれなかったりと、まあ、言い訳わあまりないのですが、現在はとりあえずPythonで一番人気のあるDjangoに絞って、Djangoに精通し、開発の生産性をあげようと思っています。
理由はというと、活発かつ大規模なコミュニティ、大規模なサービスに使われている実績、使用者が多いゆえに情報が多くあるという事があげられると思います。
ということで、Djangoでとりあえずアイデアを形にできるように頑張る予定です。
もちろん、Pythonistaのレベルに達せれれば、他のフレームワークにも精通したいです。
将来的にはPythonナンバーワンと言うよりも、ウェブ開発フレームワークナンバーワンになるフレームワークを他の開発者として作ってみたいですね。う~ん、ちょっと具体的にはいつになるかは、わからないですけど。。。
Saturday, December 1, 2012
Djangoを習い、そして、開発していくために
Djangoを使用している仲間を見つけたら、情報交換をするためにはユーザーグループに登録すると役に立つので、探してみました。
以下のユーザーグループにはとりあえず、参加させていただきました。
英語:
Djangoのユーザーグループ
日本語:
Djangoユーザーグループ
リソース
Djangoオフィシャルサイト(英語)
Django日本語のドキュメント
Djangoを使っているサイトを集めたページ
djangosites
以下のユーザーグループにはとりあえず、参加させていただきました。
英語:
Djangoのユーザーグループ
日本語:
Djangoユーザーグループ
リソース
Djangoオフィシャルサイト(英語)
Django日本語のドキュメント
Djangoを使っているサイトを集めたページ
djangosites
このブログについて
はじめまして、プログラミングパパです。
自分の名称の由来については、簡単に察しが付くとおもいますが、他のポストで詳細をお話する予定です。
このブログでは、Pythonでウェブ開発をするために、Python,Django等のウェブフレームワーク、開発ツール、そして、必至となるサーバー系について網羅していければと思います。
一人で、開発から、運営まで頑張れるように、つまずいたところなどを記録し、皆さんにも参考にしていただければ幸いです。
ちなみに、本職ではPHPでのプログラミングや.NET開発などが多いですが、Pythonとモバイル開発メインでやっていけるように夢は大きく持っています。
自分の名称の由来については、簡単に察しが付くとおもいますが、他のポストで詳細をお話する予定です。
このブログでは、Pythonでウェブ開発をするために、Python,Django等のウェブフレームワーク、開発ツール、そして、必至となるサーバー系について網羅していければと思います。
一人で、開発から、運営まで頑張れるように、つまずいたところなどを記録し、皆さんにも参考にしていただければ幸いです。
ちなみに、本職ではPHPでのプログラミングや.NET開発などが多いですが、Pythonとモバイル開発メインでやっていけるように夢は大きく持っています。
Subscribe to:
Posts (Atom)