如何解决如何使用aiohttp_jinja2获取一部分URL?
因此,我尝试获取http://example/home?code=123456789
这样的URL的一部分,因为它是oauth,因此每次更改123456789
所以我想得到它
这是py文件
from aiohttp import web,web_urldispatcher
import discord
from discord.ext import commands
import aiohttp_jinja2
import jinja2
from pathlib import Path
from oauth import Ouath
@aiohttp_jinja2.template('home.html')
async def start(request):
raise web.HTTPSeeOther(location=Ouath.discord_login_url)
@aiohttp_jinja2.template('home.html')
async def login(request):
return
app = web.Application(loop=self.client.loop)
aiohttp_jinja2.setup(app,loader=jinja2.FileSystemLoader(str(here)))
app.router.add_get('/',start)
app.router.add_get('/home',login)
runner = web.AppRunner(app)
await runner.setup()
self.site = web.TCPSite(runner,'127.0.0.1',5000)
await self.client.wait_until_ready()
await self.site.start()
我想将其打印在html文件中 但我不知道该如何去做 注意:我编辑代码框
解决方法
如果您有字符串,则可以使用
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')
,如果网址中没有code
,它将给出预期的None
或?code=...
。
编辑,可能您必须使用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}
因为data
是带有"code"
的词典,所以您可以使用return data
@aiohttp_jinja2.template('home.html')
async def login(request):
data = urllib.parse.parse_qs(urllib.parse.urlsplit(request.url).query)
return data
,
在挖掘了aiohttp_jinja2
和aiohttp
的源代码之后,看来您可以使用request.query.get('code')
来获取它
@aiohttp_jinja2.template('home.html')
async def login(request):
#print('code:',request.query.get('code'))
return {'code': request.query.get('code')}
如果URL中没有?code=...
,那么它将给出None
,但是您可以使用request.query.get('code',some_default_value)
设置其他默认值
文档aiohttp
:web.BaseRequest.query
由于您使用的是web
中的aiohttp
,因此可以添加接受参数的路由
routes = web.RouteTableDef()
@routes.get('/guild/{guild}')
async def guild(request):
gid = request.match_info['guild']
该网址为http://localhost:PORT/guild/123456
获取所需的详细信息后,您就可以随意渲染模板或返回响应。
@aiohttp_jinja2.template('home.html')
async def login(request):
code = urllib.parse.parse_qs(urllib.parse.urlsplit(request).query)
return {'code': code}
像这样吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。