Python 如何使用aiohttp_jinja2获取url的一部分?

Python 如何使用aiohttp_jinja2获取url的一部分?,python,discord,discord.py,aiohttp,Python,Discord,Discord.py,Aiohttp,因此,我尝试获取URL的一部分,如http://example/home?code=123456789此123456789自oauth以来每次都会更改 所以我正在努力得到它 这是py文件 从aiohttp导入web,web\u URL调度程序 进口不和 从discord.ext导入命令 进口Aiohtp_jinja2 进口金玉2 从pathlib导入路径 从oauth导入Ouath @aiohttp_jinja2.template('home.html') 异步def启动(请求): raise

因此,我尝试获取URL的一部分,如
http://example/home?code=123456789
123456789
自oauth以来每次都会更改 所以我正在努力得到它

这是py文件


从aiohttp导入web,web\u URL调度程序
进口不和
从discord.ext导入命令
进口Aiohtp_jinja2
进口金玉2
从pathlib导入路径
从oauth导入Ouath
@aiohttp_jinja2.template('home.html')
异步def启动(请求):
raise web.HTTPSeeOther(location=Ouath.discord\u login\u url)
@aiohttp_jinja2.template('home.html')
异步def登录(请求):
返回
app=web.Application(loop=self.client.loop)
aiohttp_jinja2.setup(app,loader=jinja2.FileSystemLoader(str(此处)))
app.router.add_get('/',start)
app.router.add_get('/home',login)
runner=web.AppRunner(应用程序)
等待runner.setup()
self.site=web.TCPSite(runner,'127.0.0.1',5000)
等待self.client。等待,直到准备就绪()
等待self.site.start()
我想在html文件中打印它 但我不知道如何得到那个角色
注意:我编辑代码框

,因为您正在使用
aiohttp
中的
web
,所以可以添加接受参数的路由

routes = web.RouteTableDef()
@routes.get('/guild/{guild}')
async def guild(request):
    gid = request.match_info['guild']
url将是
http://localhost:PORT/guild/123456

获取所需的详细信息后,您可以自由地呈现模板或返回响应。

如果您有字符串,则可以使用

URL = 'http://example/home?code=123456789'

code = URL.split('?code=')[-1]
或者如果数字总是在末尾,并且长度总是相同的

URL = 'http://example/home?code=123456789'

code = URL[-9:] 
但是还有
urllib.parse

URL = 'http://example/home?code=123456789'

data = urllib.parse.parse_qs(urllib.parse.urlsplit(URL).query) 
给字典

{'code': ['123456789']}
你能做到吗

code = data.get('code')
如果url中没有
?code=…
,它将给出预期的
code
None


编辑您可能必须使用
request.url

@aiohttp_jinja2.template('home.html') 
async def login(request): 
     data = urllib.parse.parse_qs(urllib.parse.urlsplit(request.url).query)
     code = data.get('code')
     return {'code': code}
因为
数据
是带有
“code”
的字典,所以您可以使用
返回数据

@aiohttp_jinja2.template('home.html') 
async def login(request): 
     data = urllib.parse.parse_qs(urllib.parse.urlsplit(request.url).query)
     return data
@aiohttp\u jinja2.template('home.html'))
异步def登录(请求):
code=urllib.parse.parse_qs(urllib.parse.urlspit(request.query)
返回{'code':code}

像这样?

在挖掘了
aiohttp\u jinja2
aiohttp
的源代码之后,似乎您可以通过
request.query.get('code')

如果URL中没有
?code=…
,那么它会给出
,但您可以使用
request.query.get('code',一些默认值)



Doc
aiohttp

如果您有字符串
url=”http://example/home?code=123456789“
然后您可以
url.split('?code=')[-1]
或者如果数字总是在末尾,并且它总是具有相同的长度
url[-9:][/code>。但是也有
urllib.parse
urllib.parse.parse_qs(urllib.parse.urlspit()http://example/home?code=123456789“).query)
提供字典
{'code':['123456789']}
它会起作用,但对我来说它不会起作用,因为当我通过discord登录时,它会随机添加代码,而且不会修复。如果我再次登录或根据用户登录,它也会更改。问题是,当我使用discord acc登录我的网站时,会添加
?code=123456789
,并且每次都会更改,因此如果我按照你告诉我的那样做,它将是正确的像
http://example.com/guild/server.name?code=145623789
它可以工作,但对我来说不会,因为当我通过discord登录时,它会随机添加代码,并且不会修复,如果我再次登录或根据userfirst方法登录,它也会更改,特别是第三种方法应该可以处理url中的任何数字。即使url.so
urllib.parse.parse_qs(urllib.parse.urlspit)中有其他变量,第三种方法也应该有效http://example/home?code=123456789“).query)
将为我获取数字它到底是什么?您必须获取当前URL并在
urllib.parse.parseqs(urllib.parse.urlspit(current_URL.query)中使用它
它应该会从当前URL中为您提供
code
。是的,问题是每次我通过discord登录时,如果当前URL发生更改,我该如何获取当前URL?我是否安装了urllib?或者它在aiohttp中?首先:它是答案/解决方案的位置-如果此代码不能解决您的问题,那么它就不是此代码的位置。最好在问题中加入代码,或者最终使用pastebin.org这样的门户网站。第二:第一次尝试,下一次提问。我没有
aiohttp_jinja2
,所以我不知道您在
请求中得到了什么,但如果这不是URL,那么它将不起作用。你应该检查你通过
打印(请求)
得到了什么,我想你可能需要
请求.url
或者甚至可能有
请求.query
或者
请求.args
(就像
烧瓶
)或者
request.query
,然后你可能已经得到了所有的参数作为字典。我在
aiohttp\u jinja2
request
的源代码中挖掘,它似乎有应该给你字典的代码,所以也许你可以做
request.query.get('code')
request.query['code']
@aiohttp_jinja2.template('home.html') 
async def login(request): 
    #print('code:', request.query.get('code'))
    return {'code': request.query.get('code')}