• Vue3 与 django 进行 前后端数据交互之(Vue 上传)


    前言:最近做前后端连接时遇到的问题,项目由本地文件前端上传至后端

    项目需要:element-plus库,vue3,django

    一.Vue的上传部分

            1.HTML 部分
    1. <template>
    2. <div>
    3. <div> // 通过一个button 组件和一个 input 组件完成前端上传的HTML部分
    4. <el-button @click="uploadFile" id="upload"
    5. type="primary" round class="right"
    6. size="default">Uploadel-button>
    7. div>
    8. <input ref="file" type="file" @change="onFileChange" style="display: none;"/>
    9. // 去除input 外观
    10. div>
    11. template>
            2.js部分
    呈现效果 : 

    过渡:学习django初始化

    二.django的接收(本文暂写txt文本类型的接收)

            1.下载 corsheaders 指令:
    pip install django-cors-headers
            2.生成app 并注册corsheaders 与app
                    1.命令行指令
    1. # 最后跟的是app的名称
    2. python manage.py startapp api
                    2.注册app 及相应的corsheaders
    1. # setting.py
    2. INSTALLED_APPS = [
    3. 'django.contrib.admin',
    4. 'django.contrib.auth',
    5. 'django.contrib.contenttypes',
    6. 'django.contrib.sessions',
    7. 'django.contrib.messages',
    8. 'django.contrib.staticfiles',
    9. 'api', # 注册上你的app 名字
    10. 'corsheaders', # 注册上corsheaders
    11. ]
    12. MIDDLEWARE = [
    13. #一定要注释掉'django.middleware.csrf.CsrfViewMiddleware'
    14. #并加上'corsheaders.middleware.CorsMiddleware',
    15. 'corsheaders.middleware.CorsMiddleware',
    16. 'django.middleware.security.SecurityMiddleware',
    17. 'django.contrib.sessions.middleware.SessionMiddleware',
    18. 'django.middleware.common.CommonMiddleware',
    19. #'django.middleware.csrf.CsrfViewMiddleware',
    20. 'django.contrib.auth.middleware.AuthenticationMiddleware',
    21. 'django.contrib.messages.middleware.MessageMiddleware',
    22. 'django.middleware.clickjacking.XFrameOptionsMiddleware',
    23. ]
    24. # 并注明可以访问的域名(博主选择的是所有域名都可以访问)
    25. CORS_ORIGIN_ALLOW_ALL = True

            3.models 及views 相关配置 

            

    1. #models.py
    2. from django.db import models
    3. import os
    4. # Create your models here.
    5. class FileOperation:
    6. @staticmethod
    7. def handle_upload_file_txt(file,filename):
    8. path = r'./txt/' # txt保存途径
    9. print(f"filename={filename}")
    10. if not os.path.exists(path):
    11. os.makedirs(path)
    12. with open(path + filename, 'w',encoding='utf-8') as destination:
    13. content = file.read()
    14. content = str(content, encoding = 'utf-8')
    15. # print(chunk)
    16. destination.write(content)
    1. #views.py
    2. from django.http import HttpResponse
    3. from django.shortcuts import render
    4. import json
    5. from api.models import FileOperation
    6. # Create your views here.
    7. def getnewoption(request):
    8. if request.method == "POST":
    9. r_list = json.loads(request.body) # 前端向后端发送的参数
    10. # 对r_list进行操作,结果存入arr。以dict数据类型{'id': '', 'file': ''}格式存储,方便后续取用;
    11. arr = [] # 后端返回前端的参数
    12. return HttpResponse(json.dumps(arr, ensure_ascii=False), content_type='application/json', charset='utf-8')
    13. # @csrf_exempt # 没加这个会报错Forbidden (CSRF cookie not set.)
    14. def upload(request):
    15. if request.method == "POST":
    16. FileOperation.handle_upload_file_txt(request.FILES.get('file'), str(request.FILES['file']))
    17. return HttpResponse('yes')

            4.urls配置

    1. # urls.py (主项目中的urls.py)
    2. from django.contrib import admin
    3. from django.urls import include, path
    4. from api import views
    5. urlpatterns = [
    6. path('admin/', admin.site.urls),
    7. path('upload/', views.upload),
    8. ]

    三.实现效果

            注释:需要前后端两个项目都运行才可

            前端呈现

            

            

            后端呈现

  • 相关阅读:
    MySQL 8.0 Undo Tablespace管理
    【Python语言速回顾】——基础语法
    JDBC入门和API详解
    软件项目验收测试报告-软件项目验收流程
    买卖股票的最佳时机系列问题
    基于LADRC自抗扰控制的VSG三相逆变器预同步并网控制策略(Simulink仿真实现)
    CRM助力企业销售运营管理
    【BLIP/BLIP2/InstructBLIP】一篇文章快速了解BLIP系列(附代码讲解说明)
    Servlet的生命周期与HTTP协议
    场景应用:利用Redis实现分布式Session
  • 原文地址:https://blog.csdn.net/sw_dl/article/details/132650486