【问题标题】:DRF APIView returns empty data object when using apisauce but not on browser viewDRF APIView 在使用 apisauce 但不在浏览器视图上时返回空数据对象
【发布时间】:2021-02-13 21:07:19
【问题描述】:

我正在尝试使用以下APIview 函数查询模型以检查对象是否存在。不幸的是,我无法在 react native apisauce get 函数中接收任何响应对象,如下所示

apisauce函数

const checkIfUserExists = (email) =>
  client.get("/account/user-exists/?email=" + email);

APIView 类

class UserExistsView(APIView):

    """Checks if user exists or not"""

    def get(self, request, *args, **kwargs):
        
        username = self.request.GET['email']

        try:
           
            user = models.UserProfile.objects.get(email=username)
        except models.UserProfile.DoesNotExist:
           
            return Response(data={'message': False})
        else:
            return Response(data={'message': True}) 

来自浏览器的结果 我在这里做错了什么?

在shell<Response status_code=200, "text/html; charset=utf-8">上打印结果

【问题讨论】:

  • 你能告诉你在浏览器中究竟得到了什么。另外,您为什么要在列表中返回该数据?有什么具体要求吗?
  • 我在问题中添加了更多信息。我添加列表只是为了测试。我已删除
  • DRF 视图似乎没有任何问题。您还可以提供整个 checkIfUserExists 功能吗?我在这里没有看到任何 .then()。

标签: reactjs react-native django-rest-framework


【解决方案1】:

假设你有一个类基础组件,你可以像下面这样修改你的函数,跟踪用户在状态中的存在。我在您的服务器端代码中看不到任何错误。但在您的 javascript 代码中,您没有处理承诺。

checkUserExists= (email) => {
    client.get("/account/user-exists/?email=" + email)
    .then(response=>{
     this.setState({isUserExists : response.data.messgae})
    )
}

【讨论】:

    【解决方案2】:

    你可以做的更简单:

    class UserExistsView(APIView):
        """Checks if user exists or not"""
    
        def get(self, request, *args, **kwargs):
            
            email = self.request.GET['email']
            user_exists = models.UserProfile.objects.filter(email=email).exists()
    
            return Response(
                data={'message': user_exists}
            )
    

    如果你创建一个 QuerySet 然后调用.exists(),Django 将调用 SQL 函数检查对象是否在数据库中,但它不会查询它,这在你从 JS 的调用中要快得多并且是期望的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      • 1970-01-01
      • 2011-03-31
      • 1970-01-01
      相关资源
      最近更新 更多