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()