Python 什么是肾盂切除术;持票人;从HTTP授权头

Python 什么是肾盂切除术;持票人;从HTTP授权头,python,string,python-3.x,Python,String,Python 3.x,我有一个如下字符串形式的授权标头: Bearer [myawesometoken] 我不想使用空格字符进行标记化,因为我希望字符串“Bearer”位于字符串的开头 从字符串返回令牌的pythonic方法是什么 是否有像PHPpreg_match()这样的正则表达式匹配函数?这是pythonic的方式吗?字符串是否总是采用这种格式 header_string = 'Bearer [myawesometoken]' token = header_string[8:-1] 假设您的授权字符串是 B

我有一个如下字符串形式的授权标头:

Bearer [myawesometoken]
我不想使用空格字符进行标记化,因为我希望字符串“Bearer”位于字符串的开头

从字符串返回令牌的pythonic方法是什么


是否有像PHP
preg_match()
这样的正则表达式匹配函数?这是pythonic的方式吗?

字符串是否总是采用这种格式

header_string = 'Bearer [myawesometoken]'
token = header_string[8:-1]

假设您的授权字符串是

Bearer mytoken
然后你可以像这样提取令牌

import re
authorization_string="Bearer mytoken"
g = re.match("^Bearer\s+(.*)", authorization_string)

if g:
    # ur token
    print(g.group(1)
else:
    print("No token")

我认为最适合的方法是使用内置的
str
和:

但是,我更愿意将头标记为3元组:

PREFIX = 'Bearer'

def get_token(header):
    bearer, _, token = header.partition(' ')
    if bearer != PREFIX:
        raise ValueError('Invalid token')

    return token

那么,如果字符串不是以“Bearer”开头,该怎么办?@aranfey它应该以“no match”作为响应,这样我就可以返回401错误。我只想支持承载令牌。这有一种味道…你是用这个头接收请求,还是用这个头发送请求?在Django middlewareNo中接收它不知道为什么会被否决。这是一个好问题。谢谢,但我只想支持承载令牌,因此字符串必须从它开始。假设我不知道承载令牌是什么,然后解释您希望如何修改字符串。请给出原始字符串和所需输出字符串的示例。谢谢!我想要pythonic的方法,这真的很有帮助。使用
str.split()
怎么样?它将消除对中间
\uu
赋值的需要。
str.partition
保证三元组结果,即使在字符串中找不到分隔符
str.split
只有在输入字符串中找到分隔符时才会拆分(可以使用
maxslit
参数控制拆分字符串的次数)。
PREFIX = 'Bearer'

def get_token(header):
    bearer, _, token = header.partition(' ')
    if bearer != PREFIX:
        raise ValueError('Invalid token')

    return token