HashID

未匹配的标注
本文档最新版为 4.0,旧版本可能放弃维护,推荐阅读最新版!

哈希ID

介绍

哈希ID是可以让你轻松地在 URL 中编码 ID,同时可以在ID到达您的控制器方法之前对其进行自动解码。
例如,我们可以对 10 之类的值进行编码,然后返回 l9avmeG 。当我们将此值传递到像/ dashboard / user / l9avmeG这样的请求时,我们会在控制器中获取正确的值:

from masonite.request import Request

class SomeController:

    # Route: /dashboard/user/@id
    # URL: /dashboard/user/l9avmeG
    def show(self, request: Request):
        request.input('id') #== 10

这对于隐藏主键 ID 非常有用,并且此包使这件事情变得非常简单。

安装

该包要求:

  • Masonite 2.0+

您可以通过运行以下命令来安装哈希ID功能所需的依赖项:

$ pip install hashids
$ pip install masonite-essentials

配置

安装后,您可以配置中间件和服务提供者:

中间件

您需要在 config/middleware.py 文件中添加中间件:

...
from masonite.contrib.essentials.middleware import HashIDMiddleware
...
HTTP_MIDDLEWARE = [
    ...
    MaintenanceModeMiddleware,
    HashIDMiddleware,
]

服务提供者

您还需要添加服务提供者:

from masonite.contrib.essentials.providers import HashIDProvider

PROVIDERS = [
    # Framework Providers
    AppProvider,
    SessionProvider,
    ..
    ..
    # Third Party Providers
    HashIDProvider,
    ..
    ..
]

好了。完成这两项操作后,就可以开始了。

用法

视图

在您的视图中,可以使用在添加服务提供程序时添加的哈希ID模板辅助函数。我们可以这样使用:

{% for user in users %}
    <a href="/dashboard/user/{{ hashid(user.id) }}">User</a>
    <!-- Generates /dashboard/user/l9avmeG -->
{% endfor %}

控制器

此功能被设计为透明的。当中间件方法运行时,它将检查所有请求输入并尝试对其进行解码。它将解码后的值重新插入到请求输入中,并忽略所有无法正确解码的内容。

您可以像正常情况一样获得输入:

from masonite.request import Request

class SomeController:

    # Route: /dashboard/user/@id
    # URL: /dashboard/user/l9avmeG
    def show(self, request: Request):
        request.param('id') #== 10

Inputs

这也适用于获取输入,因此,如果您具有 / dashboard / user?id = l9avmeG 之类的请求,则仍然可以通过使用 input() 获得正确的值。

from masonite.request import Request

class SomeController:

    # Route: /dashboard/user
    # URL: /dashboard/user?id=l9avmeG
    def show(self, request: Request):
        request.input('id') #== 10

编码

您还可以通过导入 Essentials 辅助函数自己对值进行编码:

from masonite.request import Request
from masonite.contrib.essentials.helpers import hashid

class SomeController:
    def show(self):
        hashid(10) #== l9avmeG

解码

您需要一些解码设置。您可以通过传递 decode 关键字来解码以前编码的普通字符串。

from masonite.contrib.essentials.helpers import hashid
​
class SomeController:
    def show(self):
        hashid('l9avmeG', decode=True) #== l9avmeG

您还可以传入值字典以进行解码。该函数将尝试对每个键值解码,并插入正确的值。它将跳过无法解码的内容。

from masonite.contrib.essentials.helpers import hashid
​
class SomeController:
    def show(self):
        values = {'id': 'l9avmeG': 'name': 'Joe'}
        hashid(values, decode=True) #== {'id': '10': 'name': 'Joe'}

这实际上是这个功能底层实现的原理。

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/masonite/2.3/ma...

译文地址:https://learnku.com/docs/masonite/2.3/ma...

上一篇 下一篇
贡献者:1
讨论数量: 0
发起讨论 只看当前版本


暂无话题~