django如何实现阻塞请求发给django的数据可以保存在一个模型里面

50 阅读2分钟

思路:以txt文件当作媒介,把请求返回的数据先放在txt中,然后再一起保存在Django模型里

前端

image.png

//axios添加用户
async addNew(){

  await this.$axios.get("http://127.0.0.1:8000/detail/detailupload?"+"name="+this.nameadd+"&fitness="+this.fitnessadd+"&status="+
      this.value).then(
      (res)=>{
        console.log("我获得了返回的数据",res.data)
      },
      (error)=>{
        console.log("更改页面报错",error)
      })
  await this.$refs.upload.submit();

},

图片上传组件

<div class="item1">
  <div style="padding-top: 10px">图片:</div>
  <div>
      <el-upload
          ref="upload"
          :auto-upload="false"
          class="upload-demo"
          drag
          :on-change="beforeupload"
          action="http://127.0.0.1:8000/detail/img/"
          multiple>
        <i class="el-icon-upload"></i>
        <div class="el-upload__text">将文件拖到此处,或<em>点击上传</em></div>
        <div class="el-upload__tip" slot="tip">只能上传jpg/png文件,且不超过500kb</div>
      </el-upload>
  </div>

</div>

image.png

后端

image.png

image.png

import json

from django.http import HttpResponse
from django.shortcuts import render
from django.views.decorators.csrf import csrf_exempt

from detail.models import detailimg
from mysite import settings

# 一行一行读取
def read_file_line_by_line():
    with open(r'detail\data.txt', 'r') as file:
        for line in file:
            print(line.strip())  # 去除行尾的换行符并输出
def write_to_txt(data):
    with open(r'detail\data.txt', 'a+') as file:
        if file.tell() > 0:
            file.write('\n')  # 在每次写入前添加换行符
        file.write(str(data))  # 将数据写入文件

#根据行数读取
def read_line_by_number(line_number):
    with open(r'detail\data.txt', 'r') as file:
        lines = file.readlines()  # 读取所有行并将其存储在一个列表中
        if line_number <= len(lines):  # 如果行数超过了文本总行数,不再执行
            return lines[line_number - 1].strip()  # 返回对应行的数据,并去除行尾的换行符
#超过4行清空文本
def clear_file():
    with open(r'detail\data.txt', 'r+') as file:
        lines = file.readlines()
        if len(lines) >=4:  # 判断文本行数是否超过 4 行
            file.seek(0)
            file.truncate()  # 清空文本内容
@csrf_exempt
def detailupload(request):

    '''宠物姓名'''
    name = request.GET.get('name')
    '''健康状况'''
    fitness = request.GET.get('fitness')
    '''状态'''
    status = request.GET.get('status')

    print("获取的前端数据-----》",name,fitness,status)

    write_to_txt(name)
    write_to_txt(fitness)
    write_to_txt(status)
    print("我是第一个请求")
    read_file_line_by_line()
    return HttpResponse("上传成功")


@csrf_exempt
def img(request):

    '''获取图片'''
    pic = request.FILES.get('file')
    url = settings.MEDIA_ROOT + pic.name
    with open(url, 'wb') as f:
        for data in pic.chunks():
            f.write(data)
    write_to_txt(url)

    print("我是第二个请求")
    load = detailimg(name=read_line_by_number(1), fitness=read_line_by_number(2), status=read_line_by_number(3),
                     imgurl=read_line_by_number(4))
    load.save()
    read_file_line_by_line()
    clear_file()
    return HttpResponse("上传成功")


'''获取领养中心的数据'''
def getdata(request):
    list = detailimg.objects.all()
    list3 = []
    for var in list:
        data = {}
        data['name'] = var.name
        data['imgurl'] = var.imgurl
        list3.append(data)
    c = json.dumps(list3, ensure_ascii=False)
    response = HttpResponse(c, content_type='application/json')
    return response


'''获取领养中心详情页数据'''
def getdata2(request):
    list = detailimg.objects.all()
    list3 = []
    for var in list:
        data = {}
        data['name'] = var.name
        data['sex'] = var.sex
        data['fitness'] = var.fitness
        data['character'] = var.character
        data['status'] = var.status
        data['imgurl'] = var.imgurl
        list3.append(data)
    c = json.dumps(list3, ensure_ascii=False)
    response = HttpResponse(c, content_type='application/json')
    return response


# Create your views here.

image.png

image.png