Django学習小記[1]——Start

10170 ワード

Part 1
Part 1は、例えば、プロジェクト、app、database、modelなどを含むdjangoの基本的な内容を全体的に1回通過している.いくつかの注意点があります.
Project vs.app appはwebアプリケーションで、zinniaというdjangoで書かれたブログエンジンはappですが、1つのprojectはプロファイルとappの集合であり、コンテナに相当します.1つのprojectは複数のappを含むことができ、同時に1つのappも複数のprojectに含まれることができる.
syncdb python manage.py syncdbは、プロジェクト内のすべてのappをデータベース初期化し、テーブル構造を作成し、データを初期化し、インデックスを作成します.appがデータベース構造を変更したり、新しいappが追加されたりした場合、新しいテーブル構造を作成しsyncdbを再実行すると、これらのappのデータベース変更が行われます.djangoはどのappがデータベースに関連付けられているかをどのように識別しますか?カスタムモデルはdjangoから継承されていることを知っておく必要があります.db.models.Modelという類です.
Django Model API Djangoは、Modelを操作するためのインタフェースを豊富に提供しています.get()、all()、save()、filter()、delete()、外部キーxxx_set等Part 2
この部分では、主にDjangoのadmin機能、すなわち「django.contrib.admin」というappの機能について説明します.「django.contrib.admin」の強さは、追加したmodelを削除したり、カスタマイズしたりする管理者のバックグラウンドを提供することです.
追加したモデルをバックグラウンドで見て管理するには、まずappのadminにします.pyモジュールにModelを登録します.
from django.contrib import admin
from polls.models import Poll

admin.site.register(Poll)
 model     :
from django.contrib import admin
from polls.models import Poll

class PollAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question']}),
        ('Date information', {'fields': ['pub_date']}),
    ]

admin.site.register(Poll, PollAdmin)

外部キー関連付け(inlines)外部キー関連付けで最も一般的なのは一対多の場合であり、django adminはinlinesという属性を提供して関連付けます:
from django.contrib import admin
from polls.models import Choice, Poll

class ChoiceInline(admin.StackedInline):
    model = Choice
    extra = 3

class PollAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline]

admin.site.register(Poll, PollAdmin)

ChoiceInlineの親を変更し、adminから継承することができます.TabularInlineでは、関連付けられたモデルの表示スタイルを変更できます.
modelが表示するフィールド(list_display)を定義します.
djangoはlist_を提供していますこの機能を実装するには、displayプロパティを使用します.
class PollAdmin(admin.ModelAdmin):
    # ...
    list_display = ('question', 'pub_date', 'was_published_recently')

list_filterとsearch_fields list_filterは右側にfilter sidebarを追加し、すばやくフィルタできます.search_fieldsは、転送されたフィールドに基づいて検索することができ、比較的有用な機能です.
template loader template loaderとは何ですか?まず、templateを見つける方法を規定したクラスです.setting.pyでは、TEMPLATE_LOADERSはtemplate loaderのメタグループを規定しており、デフォルトでは2つが開いています.
django.template.loaders.filesystem.Loader django.template.loaders.app_directories.Loader

1つ目はファイルシステムからtemplateを検索し、2つ目はappのパスからtemplateを検索することです.まずdjangoはTEMPLATEからDIRSで指定したパスでtemplateを検索し、見つからない場合は各appのtemplatesフォルダで検索し、djangoでは最初の条件を満たすtempateが使用されます.したがって、一般的にtemplateは2つのレベルに分けられ、1つはTEMPLATE_DIRSが指定したプロジェクトレベルのtemplateは、このレベルの優先順位が検索され、1つは各appのtemplateであり、これは2番目のレベルである.
Part 3
この部分では主にviewの概念と使用について述べた.Djangoでは、リクエストのパスに応じて、あるviewにリクエストがルーティングされて処理されます.2つの問題があります
1.どうやってルーティングしたの?djangoはURLに基づいて正則的に一致します.例えば:
from django.conf.urls import patterns, include, url
from polls import views

urlpatterns = patterns('',
    url(r'^choices/', views.index, name='index',
    url(r'^polls/', include('polls.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

パスがr'^choices/'に合致するURLが最初のurlpattenに一致すると、対応するリクエストがviewsにルーティングされる.index()メソッドで処理します.2番目のinclude()はどういう意味ですか?これはviewの集合であり、r'^polls/'に合致するURLペアがpolls.urlsでマッチングを続行します.url()メソッドでnameパラメータを指定できます.すなわち、このurlpattenに名前を付けて、他の場所で参照するのに便利です.include()でnamespaceパラメータを指定し、異なるappで区別できます.
2.viewはどうやって処理したの?覚えておいてください.viewメソッドは、常にHttpReponseオブジェクトを返します.たとえば、次のようにします.
from django.http import HttpResponse
from django.template import RequestContext, loader

from polls.models import Poll

def index(request):
    latest_poll_list = Poll.objects.order_by('-pub_date')[:5]
    template = loader.get_template('polls/index.html')
    context = RequestContext(request, {
        'latest_poll_list': latest_poll_list,
    })
    return HttpResponse(template.render(context))

フレームワークはこのようにして、あなたと多くのものを約束して、あなたはそれを使うには守らなければなりません.コードを簡略化するためのショートカットもたくさん提供されていますが、最下位のものを理解しなければなりません.そうしないと、自分を見失うことになります.viewでは、データベースにアクセスしたり、APIにアクセスしたりして、データを得た後、contextにデータを置いてtemplateに渡してレンダリングするなど、実際にやりたいことをすることができます.
またPart 3では、urlpattensでurlpattenを定義する際にurl()に渡されるnameパラメータと組み合わせて使用される{%url'index'%}、または{%url'detail'poll.id%}などのtemplateのtagの使い方もいくつか紹介されています.
urlpattenにnamespaceを定義する場合、url tagを使用する場合、{%url'polls:detail'poll.id%}のようなnamespaceを指定できます.
Part 4
Part 4は主に2つの方面の内容を話して、1つはFormの使用で、templateがどのように書くことを含んで、viewはどのようにformフォームのデータを受け入れて、もう1つはgeneric viewの使用方法を紹介しました.まず最初に、Formフォームの役割はユーザーが記入したデータをサーバー側に提出することです.ここでtemplateのformをどのように書くかはくだらないことではありません.viewでフォームが提出したデータをどのように処理するかに注意してください.方法は以下の通りです.
pk=request.POST['choice']

リクエストというHttpRequestオブジェクトで取ります.また、一般的にformフォームはサーバにデータをコミットするので、繰り返しコミットするためにformフォームsummitの後、formというページにとどまらず別のurlにリダイレクトされます.このとき返されるオブジェクトはHttpResponseではなく、HttpResponseRedirectオブジェクトであり、後者は前者のサブクラスであるべきです.
その後、djangoにおけるgeneric viewの使い方を紹介し、まずgeneric viewの存在意義を説明します.一般的なweb開発では、データベースからデータを得てtemplateに示す非常に一般的なパターンがあります.djangoはこのモードをカプセル化しました.generic viewです.ListViewやDetailViewなどの処理を提供しています.具体的にどのように使うかは、あまり言いません.使い方はドキュメントgeneric viewを参照してください.
Part 5
Part 5ではdjangoのユニットテストを紹介していますが、ここでは詳しくは言いませんが、その中ではwhy you need to create testsが定番と言えます.
Part 6
Part 6は簡単で、静的ファイルの使用方法を紹介し、主にAppDirectoriesFinderの原理、すなわちsetting.pyでは、STATICFILES_FINDERSでは、AppDirectoriesFinderがその1つであり、デフォルトでは、各appのstaticディレクトリで静的ファイルが検索されます.