【问题标题】:Best way to do simple API calls between Django server and android application?在 Django 服务器和 android 应用程序之间进行简单 API 调用的最佳方式?
【发布时间】:2020-08-25 15:23:47
【问题描述】:

我正在构建一个系统,在 Django 服务器上存储 Member 模型,Member 的属性之一是 score,这是我想使用 API 调用更改的。我的问题是最好的方法是什么?我查看了 Django REST 框架,但对于我正在尝试做的事情来说似乎有点矫枉过正。我一直在尝试使用正则表达式通过 url 传递必要的信息,但我不确定它是否会起作用。我需要的大纲如下

  • iOS/Android 应用发出请求发送 pk 并将分数加到总数中
  • 服务器更新适当的模型实例,并根据保存是否成功向应用返回 True/False

【问题讨论】:

    标签: django


    【解决方案1】:

    你可以通过这个非常肮脏的解决方案来实现这一点:

    urls.py

    ​​>
    from django.urls import path
    
    from . import views
    
    
    urlpatterns = [
        path('<int:member_id>/<int:score_to_add>/', views.update_score, name='update_score'),
    ]
    

    views.py

    ​​>
    from django.http import HttpResponse
    
    from .models import Member
    
    
    def update_score(request, member_id, score_to_add):
        member = Member.objects.get(pk=member_id)
        member.score += score_to_add
        try:
            member.save
            return HttpResponse("True")
        except:
            return HttpResponse("False")
    

    您也可以使用 Json 进行响应。以下是其他观点:

    替代视图.py

    ​​>
    from django.http import JsonResponse
    
    from .models import Member
    
    
    def update_score(request, member_id, score_to_add):
        member = Member.objects.get(pk=member_id)
        member.score += score_to_add
        try:
            member.save
            return JsonResponse({'status': True})
        except:
            return JsonResponse({'status': False})
    

    但我认为 Django Rest Framework 是一种更好的方法。

    【讨论】:

      【解决方案2】:

      您可以创建一个视图以返回JsonResponse。以 django 中的投票app 为例,将帖子视图转换为返回 JSON 响应。

      from django.http import HttpResponse, HttpResponseRedirect
      from django.shortcuts import get_object_or_404, render
      from django.urls import reverse
      from django.http import JsonResponse
      
      from .models import Choice, Question
      # Need to disable csrf here
      @csrf_exempt
      def vote(request, question_id):
          question = get_object_or_404(Question, pk=question_id)
          # If you want Json requests Or you can use
          # received_json_data=request.POST if you are using normal form data request.
          received_json_data=json.loads(request.body)
          try:
              selected_choice = question.choice_set.get(pk=received_json_data['choice'])
          except (KeyError, Choice.DoesNotExist):
              # If failed
              return JsonResponse({'result': False})
          else:
              selected_choice.votes += 1
              selected_choice.save()
              return JsonResponse({'result': True})
      

      虽然它有效,但我仍然建议使用 DRF,因为您正在做的事情需要适当的 REST API,而 DRF 可以缓解很多痛点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-01
        • 1970-01-01
        • 2013-09-01
        • 2012-08-17
        • 2014-04-06
        • 1970-01-01
        相关资源
        最近更新 更多