получить запрос django ajax. Post и проблема utf-8 - PullRequest
0 голосов
/ 09 ноября 2018

1. Я должен был отправить запрос. ПОСТ ДИКТ ДИКТ,

big_dict = {k:{kk:vv, kk1: vv1}, k1:{kk:vv, kk1: vv1}}

и ajax всегда каким-то образом превращали его в один диктант, как

one_dict = {k[kk]:vv, k[kk1]:vv1, k1[kk]:vv, k1[kk1]:vv1}

кто-то сказал мне

JSON.stringify(big_dict) 

перед запросом ajax, а затем json.load в моих представлениях на python django.

json.loads(request.POST.get('data'))

чертовски хорошо работало, пока кто-то не загрузил китайский символ с именем file.

На третьем шаге json.loads, на мой взгляд,

(неправильно) ключ и значение моего big_dict все еще хороши, выглядят хорошо, отображают правильный китайский символ.

(отредактированный) ключ и значение моего big_dict, китайские иероглифы в одном значении выглядят хорошо, а в другом - нет.

{'0': {'designer': 'EV', 'number': '0229', 'version': '', 'bracket': '(120门幅)', 'imgUrl': 'http://127.0.0.1:8000/media/cache/temp/EV-0229(120%E9%97%A8%E5%B9%85%EF%BC%89.jpg'}}

но когда я пытаюсь

for k, v in big_dict.items():
    for kk, vv in v.items():
        # do something with kk and vv

китайские иероглифы в vv становятся совершенно неправильными. и ОС говорит мне, что нет такого файла.

Это выглядело как простая проблема, я искал в Интернете более часа и пробовал, ничего не получалось ..

Спасибо всем заранее за помощь.

EDIT

скрипт из шаблона

$('.designInfoSave').click(function() {
    let num = $('.designBox').length;
    let bcontext = {};
    for (let i = 0; i<num; i++) {
        let infoBox = $('#'+i+"-infoBox");
        let image = $('#image'+i);
        image.toArray();
        let children = infoBox.children();
        children.toArray();
        bcontext[i] = {
            'designer': children[2].value,
            'number': children[4].value,
            'version': children[6].value,
            'bracket': children[8].value,
            'imgUrl': image[0].currentSrc,
        };
    }
    $.ajax({
            type: 'POST',
            url: "{% url 'update_des_info' %}",
            data: {'csrfmiddlewaretoken': '{{ csrf_token }}', 'context':JSON.stringify(bcontext)},
            dataType: "json",
            success: function(response){
                $("#album").hide();
                $(".ajaxResult").show();
            }
        }
    )
});

views.py

def update_des_info(request):
    if request.method != 'POST':
        return
    queryset = json.loads(request.POST.get('context'))
    print(queryset)
    exist = 0
    created = 0

    for k, v in queryset.items():
        designer = v['designer']
        number = v['number']
        version = v['version']
        bracket = v['bracket']
        fp = v['imgUrl'][v['imgUrl'].rfind('/media/')+6:]
        n, c = Design.objects.get_or_create(designer=designer, number=number, version=version)
        if c is True:
            created += 1
        else:
            exist += 1
        if n.bracket != bracket:
            n.bracket = bracket
        fpp = settings.MEDIA_ROOT + fp
        p, fn = os.path.split(fpp)
        nfp = os.path.join(settings.MEDIA_ROOT, 'designs', 'image', fn)
        shutil.move(fpp, nfp)
        if not n.image:
            n.image = nfp
        n.save()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...