Python 如何使用aiohttp_jinja2获取url的一部分?
因此,我尝试获取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
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.sourllib.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')}