【问题标题】:Api does not refresh after each request每次请求后api不刷新
【发布时间】:2020-09-10 07:39:54
【问题描述】:

我正在做 api 项目,但遇到了一个问题。我的 api 是用 DRF 编写的,响应显示在 Vue 项目上。问题是,api 应该在每次请求后刷新(浏览器刷新)。

首先,我在我的 vue 页面上显示所有过滤的对象(获取请求)。每个对象都包含一个触发 POST 请求的按钮(代表 drf,它创建另一个模型的实例 + 修改当前模型的实例 - 布尔字段更改其状态)。发送 POST 并刷新页面后,api 不应再返回实例,因为布尔值已更改。我想有某种存储或其他东西。如何保持清爽?

DRF 视图:

*class UserAccountCreation(mixins.ListModelMixin,viewsets.GenericViewSet):
    queryset = ActivityForm.objects.filter(Confirmed=False)
    serializer_class = AccountSerializer
    permission_classes = [AllowAny,]
    data = {}

    def list(self, request, format=None):
        serializer = ActivityFormSerializer(self.queryset, many=True)
        print(serializer.data)
        return Response(serializer.data, status=status.HTTP_200_OK)
    
    def create(self, request):
        serializer = AccountSerializer(data=request.data)
        if serializer.is_valid():
            password = "1234"
            user = f"User{User.objects.count()+1}"
            self.data["user"] = f"User{User.objects.count()+1}"
            self.data["email"] = serializer.validated_data["email"]
            self.data["response"] = "User created"
            serializer.save(username=user, password=password)
            return Response(self.data, status=status.HTTP_201_CREATED)
        return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)*

DRF 信号 - 这里的布尔值变化:

@receiver(post_save, sender=User)
def create_UserAccount(sender, instance, created, **kwargs):
    if created:
        user_form = ActivityForm.objects.filter(Email=instance.email).first()
        if user_form:
            user_form.Confirmed = True #// bolean changes here
            user_form.save()
            newAccount, created = UserAccount.objects.get_or_create(user=instance, form=user_form)
            newAccount.save()
        else:
            print("Manually added user")

VUE 函数 - 响应保存在变量中,这是我循环的基础:

async getAllrequests(){
        this.apiResponse = ""
        await axios.get('http://localhost:8000/allforms/').then(response =>{
            this.apiResponse = response.data
            console.log(this.apiResponse)
        })
    },
    async CreateUser(user, evt){
        console.log(user)
        const params = {
            email:user.Email
        }
        await axios.post('http://localhost:8000/allforms/', params).then(response =>{
            evt.target.innerText = "Created"
            evt.target.disabled = true
        })
        
    },

模板:

<b-card
            v-for="user in apiResponse"
            :key="user.Email"
            :title="user.Email"
            tag="article"
            style="max-width: 20rem; max-height: 20rem;"
            class="mb-2 mr-2"
            >
            <b-card-text>
                Age: {{CheckResponseValue(user.Age)}}
                <br>
                Activity: {{CheckResponseValue(user.Activity)}}
            </b-card-text>

            <b-button type="submit" variant="primary" v-on:click="CreateUser(user, $event)">Create</b-button>
        </b-card>

【问题讨论】:

    标签: vue.js django-rest-framework


    【解决方案1】:

    好的,已修复 :) 这次 DRF 文档帮助了我。问题是 list() 使用 self.queryset 而不是 self.get_queryset

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 1970-01-01
      • 2013-11-29
      • 2022-01-09
      • 1970-01-01
      • 1970-01-01
      • 2018-07-26
      相关资源
      最近更新 更多