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から抽出される
ツールバーの
  :
  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     
enctype="multipart/form-data" 。 ,FILES 。 9.HttpRequest.META    Python , HTTP 。 , : CONTENT_LENGTH —— ( )。 CONTENT_TYPE —— MIME 。 HTTP_ACCEPT —— Content-Type。 HTTP_ACCEPT_ENCODING —— 。 HTTP_ACCEPT_LANGUAGE —— 。 HTTP_HOST —— HTTP Host 。 HTTP_REFERER —— Referring 。 HTTP_USER_AGENT —— user-agent 。 QUERY_STRING —— ( )。 REMOTE_ADDR —— IP 。 REMOTE_HOST —— 。 REMOTE_USER —— 。 REQUEST_METHOD —— , "GET" "POST"。 SERVER_NAME —— 。 SERVER_PORT —— ( )。    , CONTENT_LENGTH CONTENT_TYPE , HTTP META , HTTP_ 。 , X-Bender META HTTP_X_BENDER 。 10.HttpRequest.user    AUTH_USER_MODEL , 。    ,user django.contrib.auth.models.AnonymousUser 。 is_authenticated() 。 : if request.user.is_authenticated(): # Do something for logged-in users. else: # Do something for anonymous users.   user Django AuthenticationMiddleware 。 ------------------------------------------------------------------------------------- class models.AnonymousUser django.contrib.auth.models.AnonymousUser django.contrib.auth.models.User , : id None。 username 。 get_username() 。 is_staff is_superuser False。 is_active False。 groups user_permissions 。 is_anonymous() True False。 is_authenticated() False True。 set_password()、check_password()、save() delete() NotImplementedError。 New in Django 1.8: AnonymousUser.get_username() django.contrib.auth.models.User。 11.HttpRequest.session    , 。 Django 。 。 request

ファイルのアップロード例:
        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



ブログ参照