1.查看Sanic的request有什么

参数(其中有些是方法或实例)

直接用浏览器访问http://127.0.0.1:8899/cc?p=pp
dir(request)可以查看

# sanic的中间件
@app.middleware("request")
async def middleware_1(request):
  d = {
    'accept':request.accept, 
    'app':request.app, 
    'args':request.args, 
    'body':request.body, 
    'conn_info':request.conn_info, 
    'content_type':request.content_type, 
    'cookies':request.cookies, 
    'credentials':request.credentials, 
    'ctx':request.ctx, 
    'endpoint':request.endpoint, 
    'files':request.files, 
    'form':request.form, 
    'forwarded':request.forwarded, 
    'generate_id':request.generate_id, 
    'get_args':request.get_args,
    'get_query_args':request.get_query_args, 
    'head':request.head, 
    'headers':request.headers, 
    'host':request.host, 
    'id':request.id, 
    'ip':request.ip, 
    'json':request.json, 
    'load_json':request.load_json, 
    'match_info':request.match_info, 
    'method':request.method, 
    'name':request.name, 
    'parsed_accept':request.parsed_accept, 
    'parsed_args':request.parsed_args,
    'parsed_credentials':request.parsed_credentials, 
    'parsed_files':request.parsed_files, 
    'parsed_form':request.parsed_form, 
    'parsed_forwarded':request.parsed_forwarded, 
    'parsed_json':request.parsed_json, 
    'parsed_not_grouped_args':request.parsed_not_grouped_args, 
    'parsed_token':request.parsed_token, 
    'path':request.path,
    'port':request.port,
    'protocol':request.protocol,
    'query_args':request.query_args, 
    'query_string':request.query_string, 
    'raw_headers':request.raw_headers, 
    'raw_url':request.raw_url, 
    'receive_body':request.receive_body, 
    'remote_addr':request.remote_addr, 
    'request_line':request.request_line, 
    'request_middleware_started':request.request_middleware_started, 
    'reset_response':request.reset_response, 
    'respond':request.respond, 
    'responded':request.responded, 
    'route':request.route, 
    'scheme':request.scheme, 
    'server_name':request.server_name, 
    'server_path':request.server_path, 
    'server_port':request.server_port, 
    'socket':request.socket, 
    'stream':request.stream, 
    'token':request.token, 
    'transport':request.transport, 
    'uri_template':request.uri_template, 
    'url':request.url,
    'url_for':request.url_for,
    'version':request.version
  }
  print(d)

结果

bound的都是方法

# url生成
url_for(self, view_name: str, **kwargs) -> str

# json反序列化
load_json(self, loads=json_loads) -> str

# 返回uuid,是一个类方法(classmethod)
generate_id(*_) -> uuid.uuid4() 

# 处理body
receive_body()
	 if not self.body:
            self.body = b"".join([data async for data in self.stream])
# 重置响应
reset_response() 
	stream.response.stream = None
  stream.response = None
  responded = False
  
# 返回response
respond(...)

# 路由对象
route: Optional[Route]

# 传输协议
transport: TransportProtocol

#连接信息: ip、port、socket都是从conn_info获取的
conn_info: Optional[ConnInfo]

# 解析分组参数: DefaultDict[Tuple[bool, bool, str, str], RequestParameters]
parsed_args = defaultdict(RequestParameters)

# 解析未分组的参数: DefaultDict[Tuple[bool, bool, str, str], List[Tuple[str, str]]]
parsed_not_grouped_args= defaultdict(list)

# 协议
protocol = transport.get_protocol()
{
  'accept': ['text/html', 'application/xhtml+xml', 'image/avif', 'image/webp', 'image/apng', 'application/signed-exchange;v=b3;q=0.9', 'application/xml;q=0.9', '*/*;q=0.8'], 
  'app': Sanic(name="test"), 
  'args': {'p': ['pp']}, 
  'body': b'', 
  'conn_info': <sanic.models.server_types.ConnInfo object at 0x10acd5940>, 
  'content_type': 'application/octet-stream', 
  'cookies': {'csrftoken': '1I4Acx73SpNtbOSwXfGhzkwkvBK1TdyLqBsFPCRj04XkL3uKMv6Orn7TYX4Rlbij'}, 
  'credentials': None, 
  'ctx': namespace(), 
  'endpoint': 'test.cc', 
  'files': {}, 
  'form': {}, 
  'forwarded': {}, 
  'generate_id': <bound method Request.generate_id of <class 'sanic.request.Request'>>, 
  'get_args': {'p': ['pp']}, 
  'get_query_args': [('p', 'pp')], 
  'head': b'GET /cc?p=pp HTTP/1.1\r\nHost: 127.0.0.1:8899\r\nConnection: keep-alive\r\nCache-Control: max-age=0\r\nsec-ch-ua: " Not A;Brand";v="99", "Chromium";v="101", "Google Chrome";v="101"\r\nsec-ch-ua-mobile: ?0\r\nsec-ch-ua-platform: "macOS"\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\nSec-Fetch-Site: none\r\nSec-Fetch-Mode: navigate\r\nSec-Fetch-User: ?1\r\nSec-Fetch-Dest: document\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8\r\nCookie: csrftoken=1I4Acx73SpNtbOSwXfGhzkwkvBK1TdyLqBsFPCRj04XkL3uKMv6Orn7TYX4Rlbij', 
  'headers': <Header('host': '127.0.0.1:8899', 'connection': 'keep-alive', 'cache-control': 'max-age=0', 'sec-ch-ua': '" Not A;Brand";v="99", "Chromium";v="101", "Google Chrome";v="101"', 'sec-ch-ua-mobile': '?0', 'sec-ch-ua-platform': '"macOS"', 'upgrade-insecure-requests': '1', 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36', 'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9', 'sec-fetch-site': 'none', 'sec-fetch-mode': 'navigate', 'sec-fetch-user': '?1', 'sec-fetch-dest': 'document', 'accept-encoding': 'gzip, deflate, br', 'accept-language': 'zh-CN,zh;q=0.9,zh-TW;q=0.8', 'cookie': 'csrftoken=1I4Acx73SpNtbOSwXfGhzkwkvBK1TdyLqBsFPCRj04XkL3uKMv6Orn7TYX4Rlbij')>, 
  'host': '127.0.0.1:8899', 
  'id': UUID('1e980044-e868-4e90-ac9c-d76cdbb3fbf1'), 
  'ip': '127.0.0.1', 
  'json': None, 
  'load_json': <bound method Request.load_json of <Request: GET /cc>>, 
  'match_info': {}, 
  'method': 'GET', 
  'name': 'test.cc',  # test是Sanic(name='test') cc是访问路径
  'parsed_accept': ['text/html', 'application/xhtml+xml', 'image/avif', 'image/webp', 'image/apng', 'application/signed-exchange;v=b3;q=0.9', 'application/xml;q=0.9', '*/*;q=0.8'], 
  'parsed_args': defaultdict(<class 'sanic.request.RequestParameters'>, {(False, False, 'utf-8', 'replace'): {'p': ['pp']}}), 
  'parsed_credentials': None, 
  'parsed_files': {}, 
  'parsed_form': {}, 
  'parsed_forwarded': {}, 'parsed_json': None, 
  'parsed_not_grouped_args': defaultdict(<class 'list'>, {(False, False, 'utf-8', 'replace'): [('p', 'pp')]}), 
  'parsed_token': None, 
  'path': '/cc', 
  'port': 56221, 
  'protocol': <sanic.server.protocols.http_protocol.HttpProtocol object at 0x10ab33310>, 
  'query_args': [('p', 'pp')], 
  'query_string': 'p=pp', 
  'raw_headers': b'Host: 127.0.0.1:8899\r\nConnection: keep-alive\r\nCache-Control: max-age=0\r\nsec-ch-ua: " Not A;Brand";v="99", "Chromium";v="101", "Google Chrome";v="101"\r\nsec-ch-ua-mobile: ?0\r\nsec-ch-ua-platform: "macOS"\r\nUpgrade-Insecure-Requests: 1\r\nUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.64 Safari/537.36\r\nAccept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9\r\nSec-Fetch-Site: none\r\nSec-Fetch-Mode: navigate\r\nSec-Fetch-User: ?1\r\nSec-Fetch-Dest: document\r\nAccept-Encoding: gzip, deflate, br\r\nAccept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8\r\nCookie: csrftoken=1I4Acx73SpNtbOSwXfGhzkwkvBK1TdyLqBsFPCRj04XkL3uKMv6Orn7TYX4Rlbij', 
  'raw_url': b'/cc?p=pp', 
  'receive_body': <bound method Request.receive_body of <Request: GET /cc>>, 
  'remote_addr': '', 
  'request_line': b'GET /cc?p=pp HTTP/1.1', 
  'request_middleware_started': True, 
  'reset_response': <bound method Request.reset_response of <Request: GET /cc>>, 
  'respond': <bound method Request.respond of <Request: GET /cc>>, 
  'responded': False, 
  'route': <Route: name=test.cc path=cc>, 
  'scheme': 'http', 
  'server_name': '127.0.0.1', 
  'server_path': '/cc', 
  'server_port': 8899, 
  'socket': ('127.0.0.1', 56221), 
  'stream': <sanic.http.Http object at 0x10ab605f0>, 
  'token': None, 
  'transport': <TCPTransport closed=False reading=True 0x7fd3dbc04ad0>, 
  'uri_template': '/cc', 
  'url': 'http://127.0.0.1:8899/cc?p=pp', 
  'url_for': <bound method Request.url_for of <Request: GET /cc>>,
  'version': '1.1'
}

获取token

使用postman测试访问

# 这个会被 request.token捕获
Authorization:Bearer [Token JWT]

# 需要自己在headers里捕获
# request.headers.get('x-refresh-token').replace('Bearer ', '')
X-Refresh-Token:Bearer [Refresh-Token JWT]
posted @ 2022-06-13 15:56  lxd670  阅读(183)  评论(0编辑  收藏  举报