【问题标题】:How does interacting with the django rest api through the url work?通过 url 与 django rest api 交互如何工作?
【发布时间】:2018-07-27 12:56:55
【问题描述】:

我知道 Django rest 框架是用于以编程方式与 Django 服务器交互,但我仍然不明白的一件事是如何。
我想要做的是让我的客户端应用程序(移动应用程序)发送数据(不知何故)到 Django 服务器,以便基于变量创建/检索数据,显然这必须通过 URL 完成,因为不会有与 API 的直接 GUI 交互。 (除非我弄错了,我可能是这样)
我已经阅读了官方文档并按照教程进行到最后,但仍然不明白这应该如何工作。
我所要求的只是一个快速而简单的解释,因为我到处搜索并没有找到足够简单的解释来掌握这一切应该如何工作的核心概念。

【问题讨论】:

  • 您发送 HTTP 请求,就像您的浏览器一样。事实上,大多数浏览器甚至可以很好地可视化响应。例如:api.stackexchange.com//2.2/users/…
  • 好的,但我也希望能够创建用户和其他模型,但不知道我应该如何为所述模型中的每个字段指定数据。
  • 通常您将这些作为 POST 参数传递。事实上,REST API 与浏览器与浏览器的交互方式并没有太大区别。唯一重要的区别是,对于网页,将数据写入某种(格式良好的)HTML 流中,而 API 通常使用较少嘈杂和标准化的格式。
  • 是的,我不知道该怎么做。在查看文档时,我认为它与这些 POST 和 GET 以及其他参数有关,答案可能正盯着我看,但我就是不知道如何使用它们

标签: django rest django-rest-framework


【解决方案1】:

我认为您正在寻找的是JSONResponse 和相关对象:

这将允许您发送 JSON 以响应请求。

from django.http import JsonResponse
def my_view_json(request):    
    response = JsonResponse({'foo': 'bar'})
    return response

如果您的模板或网页需要视图发出请求并指定不同的参数,他们可以通过添加 POST 变量 (examples) 来实现。这些可以像这样在视图中解析:

def myView(request):
    my_post_var = request.POST.get('variable_name', 'default_value')
    my_get_var = request.GET.get('variable_name', 'default_value')

然后,您可以以任何您喜欢的方式解析发送的内容,并决定您想用它做什么。

【讨论】:

    【解决方案2】:

    基本上, 您可以定义执行 Get/POST/PUT 请求的 URL,并且可以向其发送数据。

    例如: urls.py

        from django.conf.urls import url,include
        from app import views
    urlpatterns = [
     url(r'^(?i)customertype/$',views.CustomerViewSet.as_view()),
     url(r'^(?i)profile/$', views.Save_Customer_Profile.as_view()),
     url(r'^(?i)customer_image/$', views.Save_Customer_Image.as_view()),
    ]
    

    现在每当用户将请求发送到: example.com/profile ==> 这将根据方法类型在 Save_Customer_Profile 视图中接收,Save_Customer_Profile 如下:

    class Save_Customer_Profile(APIView):
        """Saves and Updates User Profile!"""
        def get(self, request, format=None):
           return AllImports.Response({"Request":"Method Type is GET Request"})
    
        def post(self, request, format=None):
            return AllImports.Response({"Request":"Method Type is Post Request"})
    
        def put(self,request, format=None):
            return AllImports.Response({"Request":"Method Type is Put Request"})
    

    【讨论】:

    • 将 Rest API 视为编写没有前端的 Web/Android/Ios 应用程序的完整后端,因为您必须明确调用 API!
    【解决方案3】:

    我认为 OP 指的是如何以编程方式执行 GET/POST 请求。在这种情况下,这样做就足够了(值是虚拟的):

    获取:

    import requests
    
    r = requests.get('http://localhost:8000/snippets/')
    
    print(r.json())
    print(r.status_code, r.reason)
    

    发布:

    data = {'code': 'print(" HELLO !!!")', 'language': 'java','owner': 'testuser'}
    r = requests.post('http://localhost:8000/snippets/', data=data,  auth=('testuser', 'test'))
    

    【讨论】:

      猜你喜欢
      • 2013-10-03
      • 2016-03-17
      • 2019-06-25
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多