【问题标题】:How to handle web and mobile requests in django view如何在 django 视图中处理 Web 和移动请求
【发布时间】:2015-03-01 07:34:23
【问题描述】:

我知道这是一个非常简单的问题,但我不明白如何解决这个问题。

我有一个名为 Restaurant 的模型,其中包含有关餐厅的信息(名称、位置等)。我有一个视图可以处理对 url localhost:8000/restaurants 的请求,并使用 django-rest-framework 返回餐厅的 JSON 表示。我之所以这样做,是因为我正在使用来自 android 应用程序的这些数据。

现在我想从网络访问相同的 url,但这次我想看到一个包含餐厅信息的完全呈现的 html。

所以,我的具体问题是,如果两个请求都指向相同的 url 和视图,我如何知道(并因此以 JSON 流或 html 响应)请求是来自 android 应用程序还是来自 Web 浏览器?

【问题讨论】:

    标签: android python json django rest


    【解决方案1】:

    您可以使用 Django Rest Framework 的TemplateHTMLRenderer。它根据请求的类型有条件地输出 JSON 或 HTML 页面。您可以为正在使用的视图定义以下属性

    class YourView(generics.TypOfView):
        renderer_classes = (TemplateHTMLRenderer, JSONRenderer,)
        template_name = 'path_to_template.html'
    

    【讨论】:

      【解决方案2】:

      我还不能发表评论,所以我会在答案中发布。

      您可能想尝试按照 Adam here 的描述创建中间件,在您的观点中,您可以使用 is_phone、is_tablet 进行检查,然后以适当的格式发送响应

      【讨论】:

      • 感谢您的快速回复。但是,如果用户通过智能手机的浏览器访问该 url 怎么办?它将被检测为 is_phone 但我仍然想向他展示 html。如果请求来自本机 android/iOS 应用程序,我只想返回 JSON 提要。你有什么建议?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多