TOP

PHPerがDjangoをやって1か月ぐらい経ったメモ

2017-06-07 14:51:29

あんまりまとまってないけどとりあえず覚えた事をまとめてメモ

Viewの共通処理(デコレータ)

DjangoでViewに機能を追加するには、Pythonのデコレータを用いる方法が一般的

@login_required      # デコレータ(例:ログイン処理)
def my_view(request):
    # ...

ミドルウェア

もし、繊細な情報が含まれているページで Viewのデコレータを忘れてしまったらどうなるでしょう?幸いにも、Djangoでは、全てのリクエストをフックしてサイト全体に機能を追加できる「ミドルウェア」を書くことができます

DBのバックアップとリストア

Djangoではデータベースのバックアップとリストアがmanage.pyで行え、

$ python manage.py dumpdata app_name --format=json > app.json

でデータベースのバックアップが、

$ python manage.py loaddata app.json

でデータベースのリストアがそれぞれ実行できます。

文字列連結

+で連結すると速度に影響したりメモリをたくさん使ってしまうので、リストに格納してから文字列に連結する

# -*- conding: utf-8 -*-

class Test():

    def __init__(self):
        # 文字列を格納するためのリストを作成
        self.testList = []

    def main(self):
        self.testList.append("abc")
        self.testList.append("def")

        # 半角スペースでリストないの要素を連結する
        self.testStr = " ".join(self.testList)

        print self.testStr

if __name__ == '__main__':
    test = Test()
    test.main()

AppConfig

アプリケーションを設定するには、 AppConfig のサブクラスを作り、そのサブクラスへのドット区切りのパスを INSTALLED_APPS に追加

TemplateView

# Template: A.html
<html>
    <head></head>
    <body>
        {% block hello %}
            Hello
        {% endblock %}
    </body>
</html>

# Template B.html
{% extends "A.html" %}
{% block hello %}
World
{% endblock %}

# Rendered Template B
<html>
    <head></head>
    <body>
World
    </body>
</html>
# Template C
{% extends "A.html" %}
{% block hello %}
{{ block.super }} World
{% endblock %}

# Rendered Template C
<html>
    <head></head>
    <body>
Hello World
    </body>
</html>