编写 django-piston 客户端的正确方法是什么?

2024-03-21

我已经阅读了很多关于 django-piston 的文章,并使用它为我正在开发的应用程序制作 API,但我对世界的客户端很着迷。我已经编写了处理程序和 uri 映射,并且可以随心所欲地返回 JSON 或 XML。我陷入困境的是现在该怎么办。

我理想的结局是让 iPhone 和 Android 客户端消费并返回数据,但我不知道处理身份验证的正确方法。我能想到的最简单的方法是将用户名和密码保存在设备上,并用它标记每个请求,最终使用基本身份验证,但这会造成错误。我研究了活塞对 OAuth 的支持,并在以下人员的帮助下使其正常工作本教程 http://blog.carduner.net/2010/01/26/django-piston-and-oauth/,但这也不是正确的答案。最终,我真的很想在设备上有一个简单的用户名和密码提示,这些将通过 Piston 和 REST 发送到 Django,并且 API 密钥将返回。设备将存储该密钥并用它标记所有后续请求。这感觉是正确的方法,但我不知道该怎么做。有人能指出我正确的方向吗?


您可以编写自己的身份验证模块。这是一个例子:

class ApiKeyAuthentication(object):

    def is_authenticated(self, request):
        auth_string = request.META.get("HTTP_AUTHORIZATION")

        if not auth_string:
            return False

        key = get_object_or_None(ApiKey, key=auth_string)

        if not key:
            request.user = AnonymousUser()
            return False

        request.user = key.user

        return True

    def challenge(self):
        resp = HttpResponse("Authorization Required")
        resp['WWW-Authenticate'] = "Key Based Authentication"
        resp.status_code = 401
        return resp

您需要一个模型来存储 API 密钥到用户的映射:

class ApiKey(models.Model):
    user = models.ForeignKey(User, related_name='keys')
    key = models.CharField(max_length=KEY_SIZE)

您需要某种方法来生成实际的密钥。像这样的东西会起作用(例如,在 ApiKey 模型中save method:

key = User.objects.make_random_password(length=KEY_SIZE)

while ApiKey.objects.filter(key__exact=key).count():
    key = User.objects.make_random_password(length=KEY_SIZE)

最后,连接新的身份验证后端:

# urls.py

key_auth = ApiKeyAuthentication()

def ProtectedResource(handler):
    return resource.Resource(handler=handler, authentication=key_auth)

your_handler = ProtectedResource(YourHandler)

至于将用户名/密码交换为 API 密钥,只需编写一个处理程序,使用 BasicAuthentication 创建并返回新的 ApiKey(用于 request.user)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编写 django-piston 客户端的正确方法是什么? 的相关文章

  • jQuery - 解析 JSON 数据 - 变量名称遇到问题

    我第一次深入研究 JSON 数据的使用 不过我有一些使用 jQuery 的经验 我发布到此 URL tumblr api jyoseph com api read json 我想做的是输出返回的 json 到目前为止我所拥有的 docume
  • 分布式设置中的 Django SECRET_KEY

    如果我在负载均衡器后面设置多个 django 服务器 我希望 SECRET KEY 相同 不同还是有关系 该文档对于这个值的具体用途有点薄弱 我想一定是一样的 这是相关问题 Django SECRET KEY https stackover
  • 授予 Rails 应用 API 访问权限的最佳身份验证方法

    我想为我的网络应用程序提供经过身份验证的 API 访问 此类服务的消费者通常是其他网站 服务 验证这些用户身份的最佳方法是什么 OAuth openID http 身份验证 正如我们的工作一样 哪个最好 的答案是这样的 是 这取决于 HTT
  • 从values() 或values_list() 中排除字段

    有没有一种有效的方法从函数中排除字段values or values list e g Videos objects filter id 1 get values 我想从此查询集中排除该字段duration 我知道我可以指定我想要在结果中包
  • 在 Django 查询中与父级一起获取子级数据

    我有两个模型产品和产品包 产品包有一个产品型号的外键 我如何访问包含产品包的所有产品的列表 class Product models Model title models CharField verbose name Product Tit
  • Django admin:如何使用 url GET 参数按日期时间范围过滤记录?

    我有带有时间戳字段的记录 我想按日期时间范围过滤它们的 Django 管理视图 我正在寻找类似添加到网址的内容 timestamp lt 201012310715 timestamp gte 201012300715 这不行 有任何想法吗
  • Magento 2 REST API 客户自定义属性

    Magento 2 REST API 文档解释了在更新或创建客户时设置custom attributes 的方法 http devdocs magento com swagger index 20 html http devdocs mag
  • 如何在 Django 管理 UI 的文本区域中保留空行?

    我在一个对象上有一个字段 我使用 Django 3 2 管理 UI 中的文本区域来渲染它这段代码 https stackoverflow com a 431412 就像是 class MyObject models Model some t
  • Django 表单验证消息未显示

    我试图限制可以以表单上传的文件类型 大小和扩展名 该功能似乎有效 但未显示验证错误消息 我意识到if file size gt 4 1024 1024可能不是最好的方法 但我稍后会处理这个问题 这是 forms py class Produ
  • Kafka REST 代理 API 有哪些好处?

    我不知道Kafka REST Proxy API的优点 它是一个 REST API 所以我知道它对于管理来说很方便 人们为什么使用 Kafka REST 代理 API 添加对生产者或消费者的 Maven 依赖是否很麻烦 另外 我知道kafk
  • 从我自己的博客获取帖子[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有任何 API 通过它我可以从 wordpress com 上我自己的博客获取帖子并将它们放在我的
  • Django:通过外键将两个表连接到第三个表?

    我有三个型号 class A Model class B Model id IntegerField a ForeignKey A class C Model id IntegerField a ForeignKey A 我想要得到 B i
  • Django ConnectionAbortedError:[WinError 10053]已建立的连接被主机中的软件中止

    我将 django 与 postgresql 一起使用 每当我尝试保存或删除任何内容时 都会发生此错误 Traceback most recent call last File c program files x86 python35 32
  • Django:在表单中初始化小部件时获取当前网址

    当我初始化表单以在其中找到我想要检查的字符串时 我想获取当前的 url 根据这个字符串 我想更改放入单选小部件中的数据 我想根据 url 显示不同的 radioselect 选项 class FunctionForm forms Model
  • JAX-RS 多态 POST 请求:我应该如何编写 JSON?

    我在尝试用 JAX RS 解决这个问题时遇到了麻烦 我相信它与编组 解组过程有关 我认为我对此不太了解 并且我想重新创建这个 发帖的 REST 端点是 rest register 所以我的服务定义如下 ApplicationPath res
  • 为什么 Django 的 URLField 默认截断为 200 个字符?

    我喜欢 Django 并且经常使用它 我发现它的大部分默认设置都是正常的 但有一个一直困扰着我 以至于我在每个项目中都覆盖了它 a 的默认最大长度URLField https github com django django blob st
  • 无法安装 psycopg2 Ubuntu

    试图为 django 项目准备好服务器 但我在设置 postgres 时遇到了一些问题 我正在遵循本指南 https jee appy blogspot com 2017 01 deply django with nginx html ht
  • 静态文件配置不正确

    我已经在 Heroku 上部署了简单的博客应用程序 它运行在Django 1 8 4 我在静态文件方面遇到了一些问题 当打开我的应用程序时 我看到Application Error页面 所以我尝试调试它并发现当我提交到 Heroku 时它无
  • 如何设计 REST API 以允许返回带有元数据的文件

    假设我正在设计一个 REST API 并且我需要客户端能够获取带有元数据的文件 设计资源 操作的好方法是什么 我想到了一些想法 单个资源 即 GET files fileId 返回包含文件和带有元数据的 JSON XML 结构的多部分响应
  • Keycloak 社交登录 REST API

    我已经为我的 keycloak 实例启用了谷歌社交登录 但我需要将其用作休息服务 是否有可用于执行此操作的端点 Keycloak 中没有 Google 身份验证 API 但您可以使用以下方法解决它代币交换 https www keycloa

随机推荐

  • 哪里可以找到Hibernate的DTD?

    hibernate jar 中的 DTD 是了解可以包含哪些属性以及该标记的预期名称的好方法 打开 DTD 文件是获取所有元素和属性概览 查看默认值以及一些注释的最简单方法 这将帮助程序员从头开始编写 hibernate cfg xml 文
  • VS2022:如何使 ASP.NET Core 5 应用程序显示其控制台窗口

    在 VS2019 中 当我启动 ASP NET Core 5 应用程序时 它只公开一个 API 如果重要的话 会弹出该应用程序的控制台窗口 曾经有一些设置来决定是将其作为控制台 独立应用程序运行还是将其托管在 IIS Express 中 我
  • Glassfish 4不加载js文件

    我最近搬家了 从 glassfish 3 1 jsf 2 0 primefaces 3 5 java 6 到 glassfish 4 jsf 2 2 primefaces 5 java 8 Javascript 文件 通常是 Primefa
  • 是否可以在没有开发者 ID 的情况下测试推送通知?

    在 xcode 7 beta 版本之后 我可以在没有开发者 ID 的情况下在真实设备上安装应用程序 但是 我们可以做同样的事情吗 push notification 还是必须申请开发者ID 如果有方法请参考链接 为了使用 Apple 推送通
  • Sequelize 查找软删除的行

    我试图从数据库中获取一些已软删除的行和一些未软删除的行 但它对我不起作用 Model findAll where cond xxx include Model2 paranoid false then function rows do so
  • 使用 Apache tika 删除 PDFont 缓存

    我试图仅从许多不同的代码 rtf doc pdf 中提取文本 我很自然地转向 Apache Tika 因为它可以自动检测文档并相应地提取文本 我只对文本感兴趣 对格式等不感兴趣 我的应用程序最终出现了严重的内存泄漏 经过调查 这是来自 PD
  • Jquery 可拖放和可排序组合

    我被要求创建一个正方形网格 其中每个正方形可能包含也可能不包含链接 并且这些链接应该能够在网格上移动 我认为可拖动 可放置将是一种可行的方法 并且它工作得很好 但是 现在我们希望能够在一个可拖动对象放在另一个对象之上时能够交换可拖动对象 所
  • t-sql udf,获取参数的数据类型

    是否可以为我的 udf 获取数字参数 并根据其类型执行操作 例如 如果 p1的类型是decimal 10 3 否则如果 p1的类型是decimal 15 3 否则如果 p1 的类型是整数 尝试 sql variant property 函数
  • 字符串的最小字典值

    当使用运算符 smallest string 更具体地说 什么是比任何其他字符串更小的 使用 空字符串是所有字符串中 最小 的 也就是说 它比任何非空字符串都小 21 4 8 4 字符串 op template
  • 在用户定义类型和现有类型之间定义已存在(例如在 Prelude 中)运算符的正确方法是什么?

    假设我有一个包装现有类型的自定义类型 newtype T T Int deriving Show 假设我希望能够加起来Ts 并且将它们相加应该会导致将包装值相加 我会通过以下方式做到这一点 instance Num T where T t1
  • http 服务器可以检测到客户端已取消其请求吗?

    我的网络应用程序必须处理和提供大量数据才能显示某些页面 有时 用户关闭或刷新页面 而服务器仍在忙于处理该页面 这意味着服务器将继续处理数据几分钟 然后将其发送给不再侦听的客户端 是否可以检测到连接已断开并做出反应 在这个特定的项目中 我们使
  • Maven 多项目 Cobertura 在 mvn 站点构建期间报告问题

    我们有一个多项目 我们正在尝试运行 Cobertura 测试覆盖率报告 作为我们 mvn 站点构建的一部分 我可以让 Cobertura 在子项目上运行 但它错误地报告 0 覆盖率 即使报告仍然突出显示单元测试所命中的代码行 我们使用的是
  • CMD 全屏 Visual Studio

    我不小心将命令 shell 设为全屏 我设法将其恢复到原始状态 但现在当我运行 Visual Studio 时 屏幕闪烁黑色 我认为这是全屏命令 shell 启动 有人可以帮忙吗 如果再有一位同事问我是否感染了病毒 我就会去办公桌前 Tha
  • 像 Groupon 这样的网站如何根据其进行交易的城市来进行地理定位?

    假设您从加利福尼亚州阿古拉山 Agoura Hills 的入口点访问 Groupon Groupon 将如何将该城镇引用到最近有优惠的城市 例如洛杉矶 并选择该城市作为最近的城市 它是否从该位置获取纬度 经度并计算与所有可用城市的距离 选择
  • iOS 5 上的 jQuery 事件

    我在 jQuery 1 6 4 iOS 5 和 touchstart touchend 事件的注册方面遇到问题 显然 如标题中所述 采取以下代码
  • 如何判断拼图是否完成?

    我正在准备一款像拼图这样的小游戏 为此我在布局中使用了 9 个图像视图和 9 个不同的图像 在启动时将图像设置为 imageview 这些是实际图像 随机播放后用户将滑动图像以完成拼图 我想检查修改后的图像与实际图像的 天气是否相等 如果它
  • 在 WinForms 中更新 BindingSource 不会更新数据源集合

    我想在中显示自定义集合DataGridView在 Windows 窗体应用程序中 这个自定义集合实现了ICollection and IEnumerable 我已经设置了一个BindingSource 使用集合作为 DataSource 属
  • 启动时将 par 重置为默认值

    通常 当我制作自己的绘图函数时 我会制作一个构造 op lt par mypar myvalue on exit par op 这是恢复的标准方法par到之前的值 想象一下 您一直在运行一些确实更改了某些参数的函数 并且您需要在 R 中启动
  • Ruby on Rails:没有视图的操作

    我有一个我认为非常简单的问题 我有 PhP 背景 并且过去一直这样做 所以我可能以错误的方式看待这个问题 我正在尝试在 RoR 中创建一个 ajax 处理程序 当用户单击按钮时 javascript 会触发 POST 并使用 jQuery
  • 编写 django-piston 客户端的正确方法是什么?

    我已经阅读了很多关于 django piston 的文章 并使用它为我正在开发的应用程序制作 API 但我对世界的客户端很着迷 我已经编写了处理程序和 uri 映射 并且可以随心所欲地返回 JSON 或 XML 我陷入困境的是现在该怎么办