【Vue+Django】前后端分离简单设定--20230203

58 篇文章 1 订阅

Vue前端请求数据

api/index.js 设定api接口

//请求数据
export const reqTrainingRequestData = ()=> requests({url:'/api_TrainingRequest_data/',method:'get'});

index.vue发请求

 <button @click="getTrainingRequestData">获取ajax数据</button>


  methods: {
    // 发请求
    async getTrainingRequestData(){
      console.log('发请求')
      let result = await reqTrainingRequestData()
      console.log('result',result)
    },
  },

vue.config.js防止跨域

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  lintOnSave: false,
  devServer: {
    //代理服务器解决跨域
    proxy: {
        //会把请求路径中的/api换为后面的代理服务器
        '/api': {
            //提供数据的服务器地址
            //target: 'http://gmall-h5-api.atguigu.cn',
	          target: 'http://127.0.0.1:8000',
          }
      },
    }
})

Django后端处理逻辑

利用json模块传送数据,同时用正则re_path来处理url。

views.py利用json模块传送数据

# Json分享数据
def api_TrainingRequest_data(request,plant_id = '',dept_code='',employee_id=''):
    print('api_TrainingRequest_data收到数据请求')
    ### 筛选出对应数据
    TrainingRequest_objects_all = TrainingRequest.objects.all()
    TrainingRequest_objects = TrainingRequest_objects_all
    if plant_id:
        TrainingRequest_objects = TrainingRequest_objects & TrainingRequest_objects_all.filter(plant_id=plant_id)
    if dept_code:
        TrainingRequest_objects = TrainingRequest_objects & TrainingRequest_objects_all.filter(dept_code=dept_code)
    if employee_id:
        TrainingRequest_objects = TrainingRequest_objects & TrainingRequest_objects_all.filter(employee_id=employee_id)

    TrainingRequest_data= []

    ### 把数据塞进list里面
    for i in TrainingRequest_objects:
        TrainingRequest_data.append({
            'plant_id':i.plant_id,
            'dept_code':i.dept_code,
            'employee_id':i.employee_id,
            'employee_name':i.employee_name,
            'question2-Q':'Q2_',
            'question2-A':i.question2.split('|'),
            'question3-Q':'Q3_',
            'question3-A':i.question3.split('|'),
            'question4-Q':'Q4_',
            'question4-A':i.question4.split('|'),
            'question5-Q':'Q5_',
            'question5-A':i.question5.split('|'),
            'question6-Q':'Q6_',
            'question6-A':i.question6.split('|'),
			........

        })
    return HttpResponse(json.dumps(TrainingRequest_data,ensure_ascii=False,indent=4),content_type='application/json')

urls.py用正则re_path来处理url

from  django.urls  import re_path

urlpatterns = [
	......
    path('api/api_TrainingRequest_data/', views.api_TrainingRequest_data, name='api_TrainingRequest_data'),
    ### * 0或多,+至少1,? 0或1
    re_path('api/api_TrainingRequest_data/(?P<plant_id>[A-Z0-9]*)/(?P<dept_code>[A-Za-z0-9]*)/(?P<employee_id>[A-Za-z0-9]*)/', views.api_TrainingRequest_data, name='api_TrainingRequest_data'),
]

效果:

前端发请求
在这里插入图片描述
后端收到请求,返回数据
在这里插入图片描述
前端收到数据
在这里插入图片描述

参考链接

django框架——路由系统(正则表达式)
https://blog.csdn.net/xmxt668/article/details/89504320

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值