ファイルとAjaxを介してファイルをアップロードすることでジャンゴ

まず、ファイルをアップロードするためには、フォームを形成します

  1. HTMLテンプレート

< フォームアクション=「/インデックス/」メソッド=「POST」のenctype =「マルチパート/フォームデータ」> 
フォーム属性で書かれた#1のenctypeを=「マルチパート/フォームのデータ」のデータファイルの形式をサポートするために、このフォームを送信 { %csrf_token%} アバター< INPUTの種類= "ファイル" = "touxiang" ID = "ファイル" > < BR > < ラベル= "名前" >ユーザー名</ ラベル> < INPUTのタイプ= "テキスト" ID = "名前"名前=「ユーザ名」> < ボタンID = "BTN" >提交</ ボタン> </ 構成>

  2.書かれたビューが表示します

DEFのインデックス(要求):
     IF request.method == ' GET ' 返さレンダリング(リクエスト、' index.htmlをする' 
        のuname = request.POST.get(' ユーザ名' 
        ファイル = request.FILES.getを(" touxiang '.FILES.get()によって取得されたファイルデータを取得したファイル 
        FILE_NAME = file.nameの
        パス = os.path.join(settings.BASE_DIR、' に静' ' IMG '、FILE_NAME) 、ファイルのパスをスプライス 
        オープン(パスと、' WB ' F AS): は、ローカルファイルに書き込まれます
            のためにファイル:
                f.write(I)
        を返すのHttpResponse(のunameを)

  バックエンドの受信FILESだけでなく、ファイル名を受け取った人に時間内に文書の内容を受信すると、

  request.FILES.get(「ファイル」)を受信した後、(ファイルが動画である場合、それらはハンドル.chunksを使用することができ、ファイルがサイクルを通して読み取ることができ、ファイルハンドルの同様のデータ・タイプを受信することになります)固定サイズのファイルを受信、メモリを防ぐために満たされています

チャンクの(ある)デフォルトのビットのサイズがジェネレータ、64キロバイトであり、最大値は2.5メガバイトである、65536bをテスト返します

ファイルをアップロードするには、2つ、アヤックス

  HTMLテンプレートの1

    $(' #Btn ' ).click(関数(){ 
        VARのいるFormData =いるFormData新新(); Ajaxは、このタイプの必要性をファイルをアップロード、それがformataのに処理されたキー型追加します 
        (formdata.appendをは、uname 、($ #NAMEに).val()); キーと値のペアを追加し、キーと値の分離の間にカンマ使用して、メモ書きを追加することである 
        formdata.append(ファイル、$を(" #FILE ' )[0] .files [0]); 
        formdata.append(' csrfmiddlewaretoken '$( ' [NAME = csrfmiddlewaretoken] ').val()); csrf_tocken覚えておいてください
        $アヤックス({
             ' URLを'" {%URL 'インデックス'}%" ' タイプ'' POST ' ' データ':FORMDATA、 ここで良いFORMDATAにデータを追加し 
            PROCESSDATAを: //、偽データ処理しない
            のcontentTypeを:falseに、 // コンテンツタイプを設定しない
            成功:関数(RES)を{ 
                にconsole.log(RES)
            } 
        })
     })

  機能の観点から2

DEFのインデックス(要求):
     IF request.method == ' GETは' 返さレンダリング(リクエスト、' index.htmlをする' それ以外 = request.POST.get(' のuname '#は、データから送信されたPOSTリクエストを取得 
        ファイルをrequest.FILES.get =(' TOU 'を取得、アップロードされたデータファイル 
        file_nameに= file.name ファイル名の取得 
        (settings.BASE_DIRをパス= os.path.joinを、' '' IMG '、FILE_NAME) スプライシングファイルパス 
        オープン(パスと、' WB ' F AS): は、ローカルファイルに書き込まれます
            のためにfile.chunks():
               f.write(I)

三、JsonResponse

DEF 指数(要求):
     IF request.method == ' GET ' 戻りレンダリング(要求、' index.htmlを' #1 DD = { 'K1': 'V1'、 'K2': 'V2'} 
        = json.dumpsのDD(DD) 
        送信cntent_type = 'アプリケーション/ JSON'レスポンスボディを送信するとき、のHttpResponse(DD、CONTENT_TYPE = 'ファイルアプリケーション/ JSONを')#を返すテンプレートに送信され、自動的に呼び出すAJAX AJAXデシリアライズは、手動で逆シリアル化する必要がない
        #を有し、また、Pythonでは、それはJsonResponseオブジェクトである
        JsonResponseのHttpResponseオブジェクトが符号化されたJSON応答を生成するように設計された、サブクラスである
         から Djangoに。HTTP インポート JsonResponse #の輸入JsonResponse
        = {DD ' K1 '' V1 '' K2 '' V2 ' }
         戻り jsonResponse(DD)をこれは、手動で応答本体の書き込みに必要な、手動でシリアル化されないに必要なくなり 
        DD =を[11,22 、33はある]
         を返す jsonResponse(DD、安全な= Falseの)非辞書のシーケンスは、あなたが偽=安全で必要な、

四、JSONの日付データ型メソッドのシーケンス

インポートJSON
 から日時インポート日時
 から日時インポート日付

日付変換を含むデータのJSONデータ形式の
クラス:JsonCustomEncoder(json.JSONEncoder)
     DEFのデフォルト(セルフ、フィールド):
         IF でisinstance(フィールド、日時):
             戻り field.strftime(' %Y-M-%のD %% H:%のM:%のS ' のelif でisinstance(フィールド、日付):
             リターン field.strftime(' %% M-%Y-D ' リターンjson.JSONEncoder.default(自己、フィールド)


D1 = DateTime.Now()

DD = json.dumps(D1、CLS = JsonCustomEncoder) 彼はちょうどであることを後で、直列化されるデータを書き込むことができないときには、JSONを呼び出すと= JsonCustomEncoder書き込みCLSの
印刷(DD)

 

おすすめ

転載: www.cnblogs.com/wang-xing-hao/p/11266487.html