Caching
 

キャッシング - Djangoはリクエストおよびレスポンスオブジェクトを使用して

ときに、ページ、HttpRequestオブジェクトへのデータのパッケージに、Djangoの要求メタデータをクリックし、ビューのメソッドの最初の引数としてHttpRequestオブジェクトに適切なDjangoのビューのメソッドをロード要求。。
gbvy[W

HttpRequest
HTTP要求から1つに代わってのHttpRequest uesrエージェント。
については、ほとんどの要求は、オブジェクトの重要な特性であるのHttpRequest(参照表H - 1)として表示されます。セッションに加えて、他のすべての属性は読み取り専用です。
表H - 1。 HttpRequestオブジェクトのプロパティ
Attribute
Description
path

method
文字列表現で使用されるHTTPリクエストメソッド。すべて大文字。たとえば:
if request.method == 'GET':
do_something()
elif request.method == 'POST':
do_something_else()
GET
含まれてすべてのHTTPパラメータは、オブジェクトディクショナリのGET。を参照してくださいQueryDictドキュメント。
POST
。。
Serverは、空のPOST要求の状況が発生する可能性が受信された。言い換えると、フォームのフォームは、HTTP POSTメソッドを介してリクエストを送信するデータを形成することができる。したがって、request.POSTに文は、HTTP POSTメソッドを使用するかどうかを判断するために使用することができる場合はtrueですrequest.method =="POST"の場合に使用される(表method属性を参照してください)。
。を参照してくださいファイルのプロパティ。
REQUEST
便宜上、このプロパティは、属性、POSTのコレクションですとGETが、最初は、POST属性を検索し、プロパティを取得見つけるには、特別な存在。学ぶPHPの$ _REQUEST。
たとえば、{"名前":"ジョン"} = GETがおよびPOST = {"年齢":'34'}は、要求["name"]に値が"John"ですが、要求["年齢"]の値は" 34。"

COOKIES
すべてのCookieは、標準のPython辞書オブジェクトの含まれている。。。
FILES
ファイルのアップロードに含まれるすべての辞書オブジェクトのように。ファイルは、それぞれの鍵がプロパティのタグ名の値を設定します。ファイルは、それぞれの値は、標準のPythonは、次の3つのキーを格納するオブジェクトを辞書もあります:
ファイル名:ファイル名を、Pythonで文字列表現をアップロード




内容:アップロードされたファイルの元のコンテンツ
注:のみリクエストメソッドがPOSTがされ、ページを要求する

enctypeは="にmultipart / form - data"プロパティは、あるデータファイルを持っている。それ以外の場合は、ファイルが空です辞書。
META
利用可能なすべての辞書が含まれていますHTTPヘッダー情報。
CONTENT_LENGTH
CONTENT_TYPE
QUERY_STRINGの:元のクエリ文字列を解析されていない





のSERVER_NAME:サーバのホスト名
SERVER_PORTを:サーバーのポート
メタヘッダが、これらのほとんどは、たとえば、キーののHTTP_プレフィックス:
HTTP_ACCEPT_ENCODING
HTTP_ACCEPT_LANGUAGE

HTTP_REFERERの:参照ページ
HTTP_USER_AGENTに:クライアントのユーザーエージェント文字列
HTTP_X_BENDER:X線ベンダーヘッダー
user
表すdjango.contrib.auth.models.Userオブジェクトは、現在のユーザーでログイン。。あなたは、ユーザのユーザを識別するために二種類のユーザ()メソッドがログに記録されますことができます:
if request.user.is_authenticated():
# Do something for logged-in users.
else:
# Do something for anonymous users.


session
のみ、オブジェクトディクショナリの現在のセッションを表すプロパティを読み取りと書き込み。Djangoのセッションは、専用のプロパティは、サポートするために利用されるとアクティブになります。第12章を参照してください。
raw_post_data
。高度な治療が役に立つかもしれません。
要求を参照してください、また、いくつかの便利なメソッドを持つオブジェクト表H - 2:
Table H-2. HttpRequest Methods
Method
Description
__getitem__(key)
戻る服用後は、GET、最初のPOSTをとり、/ POSTのキーを入手するには。例外送出キーが存在しない場合、。

たとえば、リクエスト["foo"という]はrequest.POSTにと等価です["foo"は]をクリックrequest.GET ["foo"は]の操作を。
has_key()

get_full_path()

is_secure()
要求が安全な場合であり、trueを返すは、HTTPS要求が送信されます。
QueryDictオブジェクト
HttpRequestオブジェクトでは、GETおよびPOST属性は、クラスdjango.http.QueryDictのインスタンスです。。。一部のHTMLフォーム要素のため、例えば、 一つのキーに複数の値を渡すもの。
彼らはコピー(作成しない限り、QueryDictオブジェクト)は、(不変)は不変である。これは、我々が直接request.POSTにとrequest.GETのプロパティを変更できないことを意味します。
QueryDictの方法は、標準のすべての辞書達成するために。
Table H-3. How QueryDicts Differ from Standard Dictionaries.
Method
Differences from Standard dict Implementation
__getitem__
また、標準では契約の辞書)に対応するキー値、__getitem__(存在する場合より、されていることを少し異なっている最後の値を返します。。
__setitem__

get()
キーは、より多くの価値に対応している場合、()を取得して、最後の値を返します。。
update()
パラメータはQueryDictをすることができ、それは辞書標準することができます。標準的な更新プログラムの辞書型のメソッドを、このメソッドは、むしろそれらを交換するよりも、辞書項目追加するには:
>>> q = QueryDict('a=1')
>>> q = q.copy() # to make it mutable
>>> q.update({'a': '2'})
>>> q.getlist('a')
['1', '2']
>>> q['a'] # returns the last
['2']
items()

>>> q = QueryDict('a=1&a=2&a=3')
>>> q.items()
[('a', '3')]
values()
標準的なメソッドは少し異なっている()の値を辞書に、このメソッドは単一の値を持つロジック__getitem__()を使用します:
また、QueryDictはいくつかのメソッドが用意されて、表H - 4を参照してください。
のH - 4。 (は非辞書)QueryDictメソッドの追加
Method
Description
copy()
戻り値は、オブジェクトのコピーするには、内部実装()はPythonの標準ライブラリcopy.deepcopyです。。
getlist(key)
戻り、Pythonのリストとして返されるすべての値の対応するキーパラメータ。。 It’s guaranteed to return a list of some sort..
setlist(key,list_)

appendlist(key,item)
項目を追加し、内部のリストに関連付けられているキーに移動します。
setlistdefault(key,list)
と少し違うSetDefaultは、それはむしろ引数としてよりも、単一の値のリストを受け取り。
lists()
また、商品()は、それはたとえば、リストとして、すべてのキー値を返すことになります少し異なっています:
>>> q = QueryDict('a=1&a=2&a=3')
>>> q.lists()
[('a', ['1', '2', '3'])]
urlencode()

A Complete Example
たとえば、次のようにHTMLフォームです:
<form action="/foo/bar/" method="post">
<input type="text" name="your_name" />
<select multiple="multiple" name="bands">
<option value="beatles">The Beatles</option>
<option value="who">The Who</option>
<option value="zombies">The Zombies</option>
</select>
<input type="submit" />
</form>
場合はチェックボックスが"ビートルズ"と"ゾンビ"を、次のDjangoのリクエストオブジェクトのコンテンツが選択されている間your_name"johnsmith"を使用して、ユーザの入力フィールド:
>>> request.GET{}
>>> request.POST
{'your_name': ['John Smith'], 'bands': ['beatles', 'zombies']}
>>> request.POST['your_name']
'John Smith'
>>> request.POST['bands']
'zombies'
>>> request.POST.getlist('bands')
['beatles', 'zombies']
>>> request.POST.get('your_name', 'Adrian')
'John Smith'
>>> request.POST.get('nonexistent_field', 'Nowhere Man')
'Nowhere Man'
HttpResponse
HttpRequestオブジェクトは、それが自動的に我々自身を作成する必要がありますDjangoが、しかし、HttpResponseオブジェクトによって作成される。各メソッドには、のHttpResponse Viewオブジェクトを返す必要があります。。

建設HttpResponses

>>> response = HttpResponse("Here's the text of the Web page.")
>>> response = HttpResponse("Text only, please.", mimetype="text/plain")

>>> response = HttpResponse()
>>> response.write("<p>Here's the text of the Web page.</p>")
>>> response.write("<p>Here's another paragraph.</p>")
のHttpResponseにも渡されているハード文字列をコードではなく、パラメータとしての反復子を渡すことができます。。あなたがこのテクニックを使用する場合は、ここでいくつか注意すべきものです:
·イテレータは、文字列を返す必要があります。
。この例外がスローされます。。
最後に、説明、のHttpResponseメソッドはwrite()を実装するには、filelike使用HttpResponseオブジェクトを必要とする任意のオブジェクトを配置することができます。は、第11章、いくつかの例がある。
セットヘッダ

>>> response = HttpResponse()
>>> response['X-DJANGO'] = "It's the best."
>>> del response['X-PHP']
>>> response['X-DJANGO']
"It's the best."
また、ヘッダの存在を検出するためにhas_header(ヘッダー)を使用することができます。


ジャンゴのHttpResponseは、HTTP応答の種類を処理するために、多くのサブカテゴリが含まれています(参照表H - 5)。およびHttpResponse、django.httpこれらのサブクラス。
Table H-5. HttpResponse Subclasses
Class
Description
HttpResponseRedirect
コンストラクタは、単一のパラメータを受け付けます:URLをリダイレクトする。完全なURL(例えば、'または相対URL(例えば、'/検索可能/')注:これは、HTTPステータスコード302が返されます。
HttpResponsePermanentRedirect

HttpResponseNotModified
引数なしのコンストラクタ。Use this to designate that a page hasn’t been modified since the user’s last request.
HttpResponseBadRequest
リターン状態コード400。
HttpResponseNotFound
戻る404ステータスコードを返します。
HttpResponseForbidden
戻る403ステータスコードを返します。
HttpResponseNotAllowed

HttpResponseGone
リターン状態コード410。
HttpResponseServerError


戻るエラーに
Djangoで返されるHTTPエラーコードでは非常に簡単です。上記HttpResponseNotFound、HttpResponseForbidden、HttpResponseServerError、いくつかのサブカテゴリ。
def my_view(request):
# ...
if foo:
return HttpResponseNotFound('<h1>Page not found</h1>')
else:
return HttpResponse('<h1>Page was found</h1>')
あなたはHttpResponseNotFoundを返すときに、エラーページのHTMLを定義する必要があります:
return HttpResponseNotFound('<h1>Page not found</h1>')
404ので、最もよく使用されるHTTPエラーは、それを処理するより便利な方法がある。
利便性のために、全サイトには一貫した404エラーページは友好的であるが、Djangoは例外クラスおかねを提供しています。メソッドは、友達を成しをスローした場合、Djangoはそれをキャッチされ、標準エラーページに戻りますが、エラーコード404を返します。。
from django.http import Http404
def detail(request, poll_id):
try:
p = Poll.objects.get(pk=poll_id)
except Poll.DoesNotExist:
raise Http404
return render_to_response('polls/detail.html', {'poll': p})
成し例外を使用するためには、テンプレートファイルを作成する必要があります。。。テンプレートファイル名は、テンプレートのルートディレクトリの下に作成、404.htmlです。

。デフォルトでは、それは読み込みとレンダリング404.htmlテンプレートファイルを担当django.views.defaults.page_not_foundです。
これは、テンプレート404.htmlテンプレートファイルのルートディレクトリを定義する必要があることを意味は、テンプレートファイルの例外は、404のすべてに適用される。
メソッドは、page_not_foundビューをWebアプリケーションのほぼ99%に対応することができるはずですが、ビューのメソッドをオーバーライドする場合は、このようなカスタム404 errpr表示方法としてhandler404のURLconfのファイルを指定することができます:
from django.conf.urls.defaults import *
urlpatterns = patterns('',
...
)
handler404 = 'mysite.views.my_custom_404_view'
。デフォルトでは、URLconfは、次のコード行が含まれています:
from django.conf.urls.defaults import *
'django.views.defaults.page_not_found'に割り当て/ confにDjangoでは/のURL / defaults.pyモジュールが、handler404。
注:
リクエストされたURLは、DjangoのURLconf任意の正規表現に一致するファイルしていない場合は、404ビューのメソッドが呼び出されます。
。デフォルトの404ビューは、すべての404エラーを処理するためのテンプレートを使用します。。


同様に、ビューのコードは、ランタイムエラーが発生した場合、Djangoは、特別な動作を行います。例外ビュー方式の場合、Djangoは、メソッドの負荷をテンプレートファイル500.htmlレンダリング、既定のビューのメソッドdjango.views.defaults.server_errorを呼び出します。。
これは、テンプレート500.htmlテンプレートファイルのルートディレクトリを、すべてのサーバーエラーのために使用するテンプレートファイルを定義しなければならないことを意味。

from django.conf.urls.defaults import *
urlpatterns = patterns('',
...
)
handler500 = 'mysite.views.my_custom_error_view'