)

NomoLog

Log of my life and program

Django チュートリアル

Posted in Python Tagged as Django

PythonのWebフレームワークであるDjangoを勉強しました。 こちらのチュートリアルを進めていく上で引っかかったところをまとめました。

h2. apple wireless keyboardの導入

使いやすいようにキーバインドを調整

  • changekey.exeによるキーバインドの変更
  • Apple Wireless Keyboard Helper for Windowsを入れてFnキー等を有効化

h2. キーバインドの入れ替え

  • Google日本語入力を導入

  • コマンドキーで日本語・英語入力を切り替えられるように変更

h2. Djangoの学習

h3. Djangoの導入

注意!!

sudo pip installしてしまうと元環境のpythonのsite-packagesにインストールされてしまう模様!!

mkvirtualenv --no-site-packages necomend (python仮想環境側でライブラリを管理するためのオプション)
pip install django



以下djangoが入ったことの確認
python
>> import django
>> print django.get_version()
>> 1.6.5

h3. Djangoでweb serverを立ち上げた時ホストからアクセスできない問題

  • まずvagrantのport forwardを設定する
config.vm.network "forwarded_port", guest: 8000, host: 8800
  • 次にゲストOSのファイアウォールの設定(ポート8000を開ける)
sudo vi /etc/sysconfig/iptables

#以下を追記
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8000 -j ACCEPT
  • ipアドレス0.0.0.0を指定しweb serverを起動
python manage.py runserver 0.0.0.0:8000
  • ホストからlocalhost:8800でアクセスできる

h2. DBの設定

  • MySQLでDBを作成
mysql -u root -p <- ログイン
>> create table necommend;
>> exit;
  • settings.pyにDB設定を記述
DATABASE = {
    'default' : {
    'ENGINE' : 'django.db.backends.mysql',
    'NAME' : 'necommend',
    'USER' : 'root',
    'PASSWORD' : '',
    'HOST' : '',
    'PORT' : '',
     }

}

  • settings.pyでタイムゾーン、文字コードを変更
TIME_ZONE = 'Asia/Tokyo'

LANGUAGE_CODE = 'utf-8'
python manage.py syncdb
  • ここでエラー。MySQLdbなるモジュールがないと怒られる。対応策は以下
#まずpython-develとmysql-develをyumで入れる
yum -y install python-devel mysql-devel

#次にpipでmysql-pythonを入れる
pip install mysql-python
  • これでpython manage.py syncdbが動く
  • Djangoの認証ユーザ?の作成を求められるので作成
Username: nomoto
e-mail: ryusuke.nomoto@brainpad.co.jp
password: いつもの

h2. DjangoにおけるRDB多対多の関係

チュートリアルにはなかったので補足

例えばBlogとTagという多対多の関係を実現するときは次のようにする。

models:

1
2
3
4
5
6
7
8
9
10
class Tag(models.Model):
  name = models.CharField(max_length=200)
  def __unicode__(self):
    return self.name

class Blog(models.Model):
  title = models.CharField(max_length=200)
  tags = models.ManyToManyField(Tag)
  def __unicode__(self):
    return self.title

shell:python manage.py shell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
それぞれブログとタグを作り保存する。
b1 = Blog(title = "blog1")
b2 = Blog(title = "blog2")
b3 = Blog(title = "blog3")
t1 = Tag(name="pyton")
t2 = Tag(name="django")

保存しないとブログとタグを結びつけることができない
b1.save()
b2.save()
b3.save()
t1.save()
t2.save()

ブログとタグを結びつける。
b1.tags.add(t1)
b2.tags.add(t1,t2)
新しくタグを生成, ブログと結びつける
t3 = b3.tags.create(name="ruby")
ブログと結びついているタグを全て表示
b1.tags.all()
[<Tags: python>]
b2.tags.all()
[<Tags: python>, <Tags: django>]
タグと結びついているブログを全て表示
t1.blog_set.all()
[<Blog: blog1>, <Blog: blog2>]
タグとブログを結びつける
t1.blog_set.add(b3)

h2. DBへデータを登録

チュートリアルにある通りシェルからぽちぽちDBへデータを追加してもよいが、面倒なのでCSVから一気に登録する方法を探した。

こちらを参考にした。

Comments