Ajaxの転送ファイル

Ajaxの転送ファイル

Ajaxのファイル転送の問題が注目されるべきです

1、オブジェクトは単にからFORMDATA速いフロントエンドのデータ転送(+一般的なキーファイル)を使用することができ、これはAjaxの利点です。いいえ、別のパスはありません。

2、いくつかのパラメータがあります。

1.data:formdataオブジェクト

2.contentType:偽

3.processData:偽

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
      <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>

</head>
<body>
<input type="text" name="username" id="t1">
<input type="text" name="password" id="t2">
<input type="file" name="myfile" id="t3">
<button id="b1">提交</button>

<script>
    $('#b1').click(function () {
        // 1.先生成一个formdata对象
        var myFormData = new FormData();
        // 2.朝对象中添加普通的键值
        myFormData.append('username',$("#t1").val());
        myFormData.append('password',$("#t2").val());
        // 3.朝对象中添加文件数据
        // 1.先通过jquery查找到该标签
        // 2.将jquery对象转换成原生的js对象
        // 3.利用原生js对象的方法 直接获取文件内容
        myFormData.append('myfile',$('#t3')[0].files[0]);
        $.ajax({
            url:'',
            type:'post',
            data:myFormData,  // 直接丢对象
            // ajax传文件 一定要指定两个关键性的参数
            contentType:false,  // 不用任何编码 因为formdata对象自带编码 django能够识别该对象
            processData:false,  // 告诉浏览器不要处理我的数据 直接发就行
            success:function (data) {
                alert(data)
            }
        })
    })
</script>

</body>

</html>

ここでは自分の愚かなステップピットについて話をします:

ファイル以来の上に送信され、私は永続ストアそれよ。私の心は空に見つけ、関連する知識の文書を読んで、ファイルを保存する方法を考えるようになりました!

def upload(request):
    files = request.FILES.get('myfile')

    print(request.FILES)
    if request.is_ajax():
        if request.method == 'POST':
            print(request.POST)
            with open(r'D:\python\untitled\上课\day62\file_download\hahaha'+'.py','wb')as fw:
                for f in files:
                    fw.write(f)
            return HttpResponse('收到了 dsb')

    return render(request,'upload.html')

、ドキュメントを読んで、について自分自身を思い出させるためにそれが存在しない場合は、フォルダのようなもの、ファイルの書き込み、ファイルパスの代わりに提出しなければならない、彼はファイルが存在する場合、それ自体が、それが上書きされるファイルを作成します!

そして、最も重要な点は、私たちのファイルに直接ではないrequest.FILES、ということですが、

<クラスのdjango.utils.datastructures.MultiValueDictは '>辞書は、私が何であるかを知らない、要するに、我々は出て取得する必要があります。そして、バイナリファイルの種類があります。

シリアル化アセンブリ

私たち自身が、前項を投げ、その後、多数のオブジェクトのうち、データベースから直接問い合わせ、フロントエンドのデータ転送にはDjangoによってサポートされているフロントエンドを、行ってきましたが、アカウントに将来の発展を取って、フロントは必ずしもそう、あなたとは互換性がありません今回は、JSONを互換性のあるデータ形式を使用しようとしています。

だから我々は、フロントエンドを渡すために辞書のセットのリストの形式で記述される必要がありますが、手で非常に面倒になりますので、比較的低いモジュールがまだあるが、手書きよりも良いです。

彼は唯一のダンプの単なる配列ではありません。

from app01 import models
from django.core import serializers #这个模块用来序列化
def ser(request):
    user_queryset = models.Userinfo.objects.all()
    res = serializers.serialize('json',user_queryset)#前一个参数告诉这个方法要序列化成什么类型的数据,后面的参数就是你要序列化的数据。
    print(res)
    return render(request,'ser.html',locals())
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
      <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.min.js"></script>
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/twitter-bootstrap/3.3.1/js/bootstrap.min.js"></script>

</head>
<body>
{{ res }}
</body>
</html>

前方ファイル

[{
    "model": "app01.userinfo",
    "pk": 1,
    "fields": {
        "username": "chanyuli",
        "password": 123,
        "gender": 1
    }
}, {
    "model": "app01.userinfo",
    "pk": 2,
    "fields": {
        "username": "tank",
        "password": 321,
        "gender": 1
    }
}, {
    "model": "app01.userinfo",
    "pk": 3,
    "fields": {
        "username": "ax",
        "password": 720,
        "gender": 2
    }
}]

これらは、受信したデータJSONフォーマットツール(bejson)フォーマットされたデータを確認した後、前段階です。

おすすめ

転載: www.cnblogs.com/chanyuli/p/11761421.html