vue前端传参和DRF后端接受参数

v u e 前 端 传 参 和 D R F 后 端 接 受 参 数 vue前端传参和DRF后端接受参数 vueDRF

Vue前端

Get

url传参数的两种方式:


第一种:拼接

  • 采用在url中使用变量的方式:在path的第一个参数中,使用<参数名>的方式可以传递参数。然后在视图函数中也要写一个参数,视图函数中的参数必须和url中的参数名称保持一致,不然就找不到这个参数。另外,url中可以传递多个参数。

在后端的Django中

path('category2/<int:pk>/', Category2View.as_view()),
class Category2View(APIView):
    """
    检索, 更新和删除一个merchant实例对象.
    """
    def get_object(self, pk):
        try:
            return category2.objects.get(pk=pk)
        except category2.DoesNotExist:
            raise Http404

    def get(self, request, pk=None):
        if pk:
            merchant= category2.objects.filter(category1_id=pk)
            serializer = Category2Serializer(merchant, many=True)
            return Response(serializer.data)
        else:
            queryset = category2.objects.all()
            serializer = Category2Serializer(instance=queryset,many=True)
            return Response(serializer.data)

    def put(self, request, pk):
        merchant = self.get_object(pk)
        serializer = Category2Serializer(merchant, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def post(self, request):
        serializer = Category1Serializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)


在前端的axios中:

    this.$http.get('http://127.0.0.1:8000/gen_model/category2/'+dataset_id).then(res =>{
       console.log(res.data)
    }).catch(err =>{
       console.log(err)
    })

第二种:使用params

  • 采用查询字符串的方式:在url中,不需要单独的匹配查询字符串的部分。只需要在视图函数中使用request.GET.get(‘参数名称’)的方式来获取。

在后端的Django中

    path('category2/', Category2View.as_view()),
def author_detail(request):
    author_id = request.GET['id']
    text = '作者的id是:%s' % author_id
    return HttpResponse(text)

在前端的axios中:

    this.$http.get('http://127.0.0.1:8000/gen_model/category2/',{
	    params:{
	    id:123
	    }
	}).then(res =>{
       console.log(res.data)
    }).catch(err =>{
       console.log(err)
    })

Post

前端:Vue

在这里插入图片描述

<template>
<div class="">
     <h1 class='page-title' style="font-size:35px" align="center">添加二级数据集目录</h1>
    <el-row>
      <el-col :span="8" :offset="8">
        <br><br><br><br>
        <el-form ref="SubmitForm" :model="loginForm" label-width="80px" class='login-form' :rules="rules">
          <el-form-item label="父属" prop="name">
            <el-input v-model="SubmitForm.name"></el-input>
          </el-form-item>
          <el-form-item label="名称" prop="name">
            <el-input v-model="SubmitForm.name"></el-input>
          </el-form-item>
          <el-form-item>
            <el-button type="primary" @click="onSubmit"  >提交</el-button>
          </el-form-item>
        </el-form>
      </el-col>
    </el-row>
</div>
</template>

<script type="text/ecmascript-6">
import {Card,Row,Col,Form,FormItem,Input,Button} from "element-ui"
export default {
  name: "UpLoadCategory2",
  data() {
    return {

        SubmitForm:{
            name:""
        }
    }
  },
   components:{
    [Card.name]:Card,
    [Row.name]:Row,
    [Col.name]:Col,
    [Form.name]: Form,
    [Input.name]: Input,
    [FormItem.name]: FormItem,
    [Button.name]: Button,
  },
  methods:{
      onSubmit(){
          this.$http.post("",this.SubmitForm).then(res=>{
              console.log(res)
          }).catch(err =>{
              console.log(err)
          })

      }
  }
}
</script>

<style scoped lang='scss'>
</style>

DRF后端

    def put(self, request, pk):
        merchant = self.get_object(pk)
        serializer = Category2Serializer(merchant, data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

    def post(self, request):
        serializer = Category1Serializer(data=request.data)
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)

django rest framework :Original exception text was: ‘QuerySet’ object has no attribute ‘***’

出现这个问题的原因是:

查询返回的是 QuerySet,而我们使用Serializer去序列化Queryset自然会报错,Queryset没有某属性。

解决方案:

在序列化的Serializer中添加 many=True字段如:

serializer = ASerializer(instance=aset, many=True)

https://www.jianshu.com/p/3e08e0e60a29

一:Get

axios.get('/user', {  //params参数必写 , 如果没有参数传{}也可以
    params: {  
       id: 12345,
       name: user
    }
})
.then(function (res) {
    console.log(res);
})
.catch(function (err) {
    console.log(err);
});

二:post/put/patch请求

var formData=new FormData();
formData.append('user',123456);
formData.append('pass',12345678);
 
axios.post("/notice",formData)
     .then((res) => {return res})
     .catch((err) => {return err})
import axios from 'axios'
import qs from 'Qs'
let data = {"code":"1234","name":"yyyy"};
axios.post(`${this.$url}/test/testRequest`,qs.stringify({
    data
}))
.then(res=>{
    console.log('res=>',res);            
})
//方法一:
import axios from 'axios'
let data = {"code":"1234","name":"yyyy"};
axios.post(`${this.$url}/test/testRequest`,data)
.then(res=>{
    console.log('res=>',res);            
})

//方法二:
var readyData=JSON.stringify({
    id:1234,
    name:user
});
axios.post("/notice",readyData)
     .then((res) => {return res})
     .catch((err) => {return err})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值