万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    python django 基礎
    (IT寺小屋)紗音寺
    URL: http://atnd.org/events/40589

    @jbking
    村岡

    バージョン0.96から

    メガフレームワーク
    scaffold adminなど
    → これ使うからDjango使う意味がある

    MTV != MVC
    感心事が違う

    内部的にはControllerがある

    ModelとTemplateは必須ではない
    → データを保存するのでは無ければ


    Form・・・データチェックしたものを書く

    Viewの中にバリデーションのチェックをする人もいる。
    が、FormのModelForm使うほうが楽。

    Controllerは独立していてgenericビューがある。
    ControllerがViewの一部を担うことがある。

    admin・・・モデルの生成や編集できる。管理用アプリケーション。


    Djangoがインストールされてなくてもできる

    ・Nitrous
    https://www.nitrous.io/
    これですすめる!

    github
    https://github.com/jbking/django_learning/

    ・urls.py

    django-admin.py startproject django_lessons
    cd django_lessons
    chmod +x manage.py
    ./manage.py help
    

    コメントアウトを外す

    from django.contrib import admin
    admin.autodiscover()
    
    url(r'^admin/', include(admin.site.urls)),
    

    settings.py

        'django.contrib.admin',
    
    ./manage.py syncdb
    ./manage.py runserver 0.0.0.0:8080

    ./manage.py syncdbのあとにyesをし、名前、メアド、パスワードを聞かれるので入れる


    Webを開くには「Preview」を押す

    その後URLに「admin/」を追加

    http://djangotest-15945.apne1.actionbox.io:8080/admin/

    admindocsみんな使わないのにある。


    syncdbした直後とかでなければサーバを落とさずに編集しても大丈夫なはず。

    ./manage.py startapp test_app

    プロジェクト内の「settings.py」
    INSTALLED_APPSに追加

    アプリケーションの中に「admin.py」を自分で生成する

    ・admin.py

    ./manage.py syncdb


    Adaptorになってる。デザインパターンのAdaprorパターン。

    from django.contrib import admin
    from test_app.models import Post, Comment
    
    
    class PollAdmin(admin.ModelAdmin):
        # ↓カラムに何を表示するのか?を書いている
        # Modelのメソッド名を書けばそれが表示される
        list_display = ('subject', 'author', 'shorten_body', 'created_at', 'updated_at')
        # 日付の階層構造でなにを使うかどうかを記載
        date_hierarchy = 'created_at'
        # フィルタリングを記載しておけばAdminが解釈してくれる
        list_filter = ['created_at', 'updated_at']
    
        def shorten_body(self, model):
            if len(model.body) > 100:
                return model.body[:100] + '...'
            else:
                return model.body
    
    
    class CommentAdmin(admin.ModelAdmin):
        list_display = ('post', 'author', 'shorten_body', 'created_at', 'updated_at')
        date_hierarchy = 'created_at'
        list_filter = ['created_at', 'updated_at']
    
        def post_subject(self, model):
            return model.post.subject
    
        def shorten_body(self, model):
            if len(model.body) > 100:
                return model.body[:100] + '...'
            else:
                return model.body
    
    
    admin.site.register(Post, PollAdmin)
    admin.site.register(Comment, CommentAdmin)
    
    ./manage.py syncdb

    インタラクティブシェル

    ./manage.py shell

    SQLが見られる
     ※テーブル定義のみを主力もできる

    ./manage.py sqlall test_app

    ・課題1
    Postオブジェクトを取り出す

    まずAdminのWebで登録しておく、

    from test_app.models import Post
    Post.objects.all()
    

    ・課題2
    subjectを変えてsaveする

    from test_app.models import Post
    first = Post.objects.get(id=1)                         
    first.subject = 'おきかえ'
    first.save()
    

    http://www.djangoproject.jp/doc/ja/1.0/intro/tutorial01.html
    # 出来たオブジェクトをデータベースに保存します。 save() は明示的に呼ば
    # ねばなりません。


    ないカラム名のものに対して値を入れてもとくに反映されない
    違っててもエラーを出すやり方はあるが、面倒なので気をつけるべき

    first.hoge = 11
    first.save()
    

    Viewを作って、登録をできるように。
    POSTをする。CreateできるViewを作る。

    フィルタのタグなどは templatetags の中に〜.pyファイルを作成し、
    Template上ではこのようにロードする。

    {% load post_extras %}

    データベースマイグレーション

    モデルを書き換えてsyncdbすればできる
    しかし、前のカラムが消えてたら怖い。

    方法は2あつある。

    1.手動でalter tableする

    2.South モデル変更を検知して、変更分からSQLを生成してくれる


    カラムの200文字だったのを入らなくなったのを500文字にしたい。
    カラムを増やす


    ・アイコンのフォント
    http://fontawesome.io/icons/
    ・responsiveなCSS
    http://www.yuiblog.com/blog/2013/06/12/pure-0-2-0/


    ・↓は古いやりかた

        from django.contrib.auth import models as auth_models
    

    をインポートし、

        author = models.ForeignKey(auth_models.User)
    

    を使う

    ・1.5からはこちらが主流

    from django.conf import settings
    

    をインポートし、

    author = models.ForeignKey(settings.AUTH_USER_MODEL)
    


    ちなみにsettings.pyに実際に書かれていないものはいくつかあり、
    差分ななものを記載すればマージされる。

    templatetags にはパッケージとして認識させるために __init__.py
    が必要。

    views.py の 「return reverse('show_post_detail'」 → urls.pyの別名を呼んでいる。