まず、ファイルをアップロードするためには、フォームを形成します
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)