django - url模式匹配url safe base64字符串

imn*_*mns 2 python regex django

我在用

import base64
string_for_url = base64.urlsafe_b64encode(string_to_format)
Run Code Online (Sandbox Code Playgroud)

但我不确定如何匹配url模式中生成的字符串.我找到了这个正则表达式:(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$但是我不明白如何将它转换为命名组.你可以告诉我的正则表达式知识非常有限.

在此先感谢您的帮助.

Bur*_*lid 5

要命名一个组,以便将它传递给您的视图方法前缀(?P<name_of_variable>(group to name)).顺便说一句,这不是django特有的,它是标准Python 正则表达式语法的一部分.

对于你的例子,它将是:

base64_pattern = r'(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$'
urlpatterns = patterns('',
    (r'^foo/bar/(?P<base64string>{})'.format(base64_pattern), 'mymethod'),
    # your other patterns
)

# in the view

def mymethod(request, base64string):
   # do stuff with base64string
Run Code Online (Sandbox Code Playgroud)


Mic*_*vis 5

那个正则表达式似乎不必要地复杂化了.

我的Django生锈了,但你应该能够做到:

urlpatterns = patterns('',
    (r'things/(?P<b64_string>.+)', views.b64_view, name='b64_view')
)
Run Code Online (Sandbox Code Playgroud)

这将匹配任何看起来像www.example.com/things/abc123=的内容,并将'abc123 ='传递给views.b64_string视图的b64_string参数.

然后你可以通过尝试解码它来测试它是b64编码.这比尝试找到与b64编码的字符串匹配的正则表达式要简单得多.