如何使用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_jinja2aiohttp的源代码之后,看来您可以使用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)设置其他默认值


文档aiohttpweb.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} 

像这样吗?

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...