Djangoのビューシステムのrequestオブジェクトとresponseオブジェクト
8679 ワード
一、requestオブジェクト
ページが要求されると、Djangoは、今回の要求元の情報を含むHttpRequestオブジェクトを作成します.Djangoはこのオブジェクトを応答のビュー関数に自動的に渡し、一般的にビュー関数はrequestパラメータを使用してこのオブジェクトを受け取ることになる.
要求関連の共通値
path_infoは、ドメイン名methodリクエストで使用されるHTTPメソッドの文字列表示を含まないユーザーアクセスurlを返します.GETはすべてのHTTP GETパラメータを含むクラス辞書オブジェクトPOSTはすべてのHTTP POSTパラメータを含むクラス辞書オブジェクトbody要求体であり、byteタイプrequest.POSTのデータはbodyから抽出される
ツールバーの
ファイルのアップロード例:
ツールバーの
1.HttpRequest.get_host()
HTTP_よりX_FORWARDED_HOST(USE_X_FOrWARDED_HOSTがオンの場合、デフォルトはFalse)とHTTP_HOSTヘッダ情報は、要求された元のホストを返す.両方のヘッダに対応する値が指定されていない場合は、SERVER_を使用します.NAMEとSERVER_PORTは、PEP 3333に詳細に記載されている.
USE_X_FORWARDED_HOST:X-Forwarded-Hostヘッダを優先的に使用するかどうかを指定するブール値で、エージェントがヘッダを設定している場合にのみ使用できます.
例:「127.0.0.1:8000」
注:ホストが複数のエージェントの後ろにある場合、get_host()メソッドは失敗します.ミドルウェアを使用してエージェントのヘッダを書き換えない限り.
2.HttpRequest.get_full_path()
クエリー文字列を追加できる場合はpathを返します.
例:"/music/bands/the_beatles/?print=true"
3.HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt=’’, max_age=None)
署名されたCookieに対応する値を返し、署名が正当でない場合はdjango.core.signing.BadSignatureを返します.
defaultパラメータが指定されている場合、例外は発生せず、defaultの値が返されます.
オプションパラメータsaltは、セキュリティキーの強力な攻撃に追加の保護を提供するために使用することができる.max_ageパラメータは、Cookieに対応するタイムスタンプをチェックして、Cookieの時間がmax_を超えないことを確認するために使用されます.age秒.
4.HttpRequest.is_secure()
要求が安全である場合、Trueを返します.すなわち、リクエストパスはHTTPSによって開始される.
5.HttpRequest.is_ajax()
リクエストがXMLHttpRequestによって開始された場合、HTTP_をチェックする方法でTrueに戻ります.X_REQUESTED_WITH対応するヘッダが文字列’XMLHttpRequest’であるかどうか.
現代のJavaScriptライブラリのほとんどがこのヘッダを送信します.自分のXMLHttpRequest呼び出し(ブラウザ側)を作成する場合は、is_を手動で設定する必要があります.ajax()は動作します.
リクエストがAJAXによって開始されたかどうかに応じて応答する必要があり、Djangoのcache middlewareなどの何らかの形式のキャッシュを使用している場合はvary_を使用します.on_Headers(‘HTTP_X_REQUESTED_WITH’)は、応答が正しくキャッシュされるようにビューを装飾します.
要求関連メソッド
二、responseオブジェクト
Djangoによって自動的に作成されるHttpRequestオブジェクトと比較して、HttpResponseオブジェクトは私たちの役割の範囲です.私たちが書いた各ビューは、HttpResponseをインスタンス化し、塗りつぶし、返す必要があります.
HttpResponseクラスはdjango.httpモジュールにあります.
使用
伝達文字列:
レスポンスヘッダ情報の設定または削除
ツールバーの
HttpResponse.content:応答内容
HttpResponse.charset:応答コンテンツの符号化
HttpResponse.status_code:応答のステータスコード
三、JsonResponseオブジェクト
JsonResponseはHttpResponseのサブクラスであり、JSON符号化の応答を生成するのに特化している.
デフォルトでは辞書タイプのみが渡されますが、非辞書タイプを渡すにはsafeキーワードパラメータを設定する必要があります.
注意:JsonResponseで渡された辞書に中国語が入っている場合、属性を変更します:json_dumps_params={‘ensure_ascii’:False})
例を挙げます.
補足:
1、簡単なファイルアップロードの先端に注意する点:1.methodはpost 2.enctypeに指定する必要があるformdataフォーマットに変更する必要がある
2、pathとfull_path
ブログ参照
ページが要求されると、Djangoは、今回の要求元の情報を含むHttpRequestオブジェクトを作成します.Djangoはこのオブジェクトを応答のビュー関数に自動的に渡し、一般的にビュー関数はrequestパラメータを使用してこのオブジェクトを受け取ることになる.
要求関連の共通値
path_infoは、ドメイン名methodリクエストで使用されるHTTPメソッドの文字列表示を含まないユーザーアクセスurlを返します.GETはすべてのHTTP GETパラメータを含むクラス辞書オブジェクトPOSTはすべてのHTTP POSTパラメータを含むクラス辞書オブジェクトbody要求体であり、byteタイプrequest.POSTのデータはbodyから抽出される
ツールバーの
:
django 、 、 HttpRequest 。
, 。
0.HttpRequest.scheme
( http https)
1.HttpRequest.body
, 。 HTTP , : 、XML,Json 。
, , HttpRequest.POST 。
, python , HttpRequest.read() 。
2.HttpRequest.path
, ( )。
:"/music/bands/the_beatles/"
3.HttpRequest.method
, HTTP 。 。
:"GET"、"POST"
4.HttpRequest.encoding
, ( None DEFAULT_CHARSET , 'utf-8')。
, 。
( GET POST ) encoding 。
DEFAULT_CHARSET , 。
5.HttpRequest.GET
, HTTP GET 。 QueryDict 。
6.HttpRequest.POST
, , QueryDict 。
POST POST —— HTTP POST , ,QueryDict 。
, if request.POST POST ; if request.method == "POST"
: POST , FILES 。
7.HttpRequest.COOKIES
Python , cookie。 。
8.HttpRequest.FILES
, 。
FILES name, 。
,FILES POST
ファイルのアップロード例:
def upload(request):
"""
, 。 2.5M ,django 。 , 。
,django , 。
:param request:
:return:
"""
if request.method == "POST":
# FILES ,file type=files input name
filename = request.FILES["file"].name
#
with open(filename, "wb") as f:
#
for chunk in request.FILES["file"].chunks():
#
f.write(chunk)
return HttpResponse(" OK")
ツールバーの
1.HttpRequest.get_host()
HTTP_よりX_FORWARDED_HOST(USE_X_FOrWARDED_HOSTがオンの場合、デフォルトはFalse)とHTTP_HOSTヘッダ情報は、要求された元のホストを返す.両方のヘッダに対応する値が指定されていない場合は、SERVER_を使用します.NAMEとSERVER_PORTは、PEP 3333に詳細に記載されている.
USE_X_FORWARDED_HOST:X-Forwarded-Hostヘッダを優先的に使用するかどうかを指定するブール値で、エージェントがヘッダを設定している場合にのみ使用できます.
例:「127.0.0.1:8000」
注:ホストが複数のエージェントの後ろにある場合、get_host()メソッドは失敗します.ミドルウェアを使用してエージェントのヘッダを書き換えない限り.
2.HttpRequest.get_full_path()
クエリー文字列を追加できる場合はpathを返します.
例:"/music/bands/the_beatles/?print=true"
3.HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt=’’, max_age=None)
署名されたCookieに対応する値を返し、署名が正当でない場合はdjango.core.signing.BadSignatureを返します.
defaultパラメータが指定されている場合、例外は発生せず、defaultの値が返されます.
オプションパラメータsaltは、セキュリティキーの強力な攻撃に追加の保護を提供するために使用することができる.max_ageパラメータは、Cookieに対応するタイムスタンプをチェックして、Cookieの時間がmax_を超えないことを確認するために使用されます.age秒.
>>> request.get_signed_cookie('name')
'Tony'
>>> request.get_signed_cookie('name', salt='name-salt')
'Tony' # cookie salt
>>> request.get_signed_cookie('non-existing-cookie')
...
KeyError: 'non-existing-cookie' #
>>> request.get_signed_cookie('non-existing-cookie', False)
False
>>> request.get_signed_cookie('cookie-that-was-tampered-with')
...
BadSignature: ...
>>> request.get_signed_cookie('name', max_age=60)
...
SignatureExpired: Signature age 1677.3839159 > 60 seconds
>>> request.get_signed_cookie('name', False, max_age=60)
False
4.HttpRequest.is_secure()
要求が安全である場合、Trueを返します.すなわち、リクエストパスはHTTPSによって開始される.
5.HttpRequest.is_ajax()
リクエストがXMLHttpRequestによって開始された場合、HTTP_をチェックする方法でTrueに戻ります.X_REQUESTED_WITH対応するヘッダが文字列’XMLHttpRequest’であるかどうか.
現代のJavaScriptライブラリのほとんどがこのヘッダを送信します.自分のXMLHttpRequest呼び出し(ブラウザ側)を作成する場合は、is_を手動で設定する必要があります.ajax()は動作します.
リクエストがAJAXによって開始されたかどうかに応じて応答する必要があり、Djangoのcache middlewareなどの何らかの形式のキャッシュを使用している場合はvary_を使用します.on_Headers(‘HTTP_X_REQUESTED_WITH’)は、応答が正しくキャッシュされるようにビューを装飾します.
要求関連メソッド
二、responseオブジェクト
Djangoによって自動的に作成されるHttpRequestオブジェクトと比較して、HttpResponseオブジェクトは私たちの役割の範囲です.私たちが書いた各ビューは、HttpResponseをインスタンス化し、塗りつぶし、返す必要があります.
HttpResponseクラスはdjango.httpモジュールにあります.
使用
伝達文字列:
from django.http import HttpResponse
response = HttpResponse("Here's the text of the Web page.")
response = HttpResponse("Text only, please.", content_type="text/plain")
レスポンスヘッダ情報の設定または削除
response = HttpResponse()
response['Content-Type'] = 'text/html; charset=UTF-8'
del response['Content-Type']
ツールバーの
HttpResponse.content:応答内容
HttpResponse.charset:応答コンテンツの符号化
HttpResponse.status_code:応答のステータスコード
三、JsonResponseオブジェクト
JsonResponseはHttpResponseのサブクラスであり、JSON符号化の応答を生成するのに特化している.
from django.http import JsonResponse
response = JsonResponse({'foo': 'bar'})
print(response.content)
b'{"foo": "bar"}'
デフォルトでは辞書タイプのみが渡されますが、非辞書タイプを渡すにはsafeキーワードパラメータを設定する必要があります.
response = JsonResponse([1, 2, 3], safe=False)
注意:JsonResponseで渡された辞書に中国語が入っている場合、属性を変更します:json_dumps_params={‘ensure_ascii’:False})
例を挙げます.
from django.http import JsonResponse
def index(request):
# res = {'name':'Jason ','password':18}
# return HttpResponse(json.dumps(res))
return JsonResponse({'name':'Jason ','password':'1888888'},json_dumps_params={'ensure_ascii':False})
補足:
1、簡単なファイルアップロードの先端に注意する点:1.methodはpost 2.enctypeに指定する必要があるformdataフォーマットに変更する必要がある
1. **csrfmiddleware**
2. request.FILES post
2、pathとfull_path
print('path:',request.path)
print('full_path:',request.get_full_path())
path: /upload_file/
full_path: /upload_file/?name=jason
ブログ参照