[英]How can you persist a single authenticated requests session in python?
我正在使用python requests
庫與api交互。
我首先進行身份驗證,獲取session-id
,然后創建一個請求session
以保持該連接。
因此,我創建了一個類來執行此操作,但是每次使用該類時,都會重新初始化並再次進行身份驗證。 我想避免。 本質上,我在使用DRF調用的API之間創建了一個API。 如何確保在整個應用程序中僅使用1個經過身份驗證的會話,並且該會話在多個請求中均保持不變?
班級:
class RestClient:
session = None
def create_rest_client(self):
auth = requests.auth.HTTPBasicAuth(
USERNAME,
PASSWORD
)
response = requests.post(
f'https://{ settings.HOST }/rest/session',
auth=auth
)
session = requests.Session()
session_id = response.json().get('value')
session.headers.update({'api-session-id': session_id})
return session
def get_rest_client(self):
if self.session:
return self.session
else:
return self.create_rest_client()
我使用該類實例化並獲取客戶端(自然重做auth)。 我認為這應該是全局的或單例的。
使用類:
class ProductDetail(APIView):
def get(self, request, format=None, **kwargs):
response = []
rest_client = RestClient()
session = rest_client.get_rest_client()
response = session.get(
....use authenticated session
)
return Response(response.json())
我將這樣連接一個屬性:
class RestClient:
_session = None
@property
def session(self):
if self._session:
return self._session
auth = requests.auth.HTTPBasicAuth(USERNAME, PASSWORD)
response = requests.post(
f"https://{ settings.HOST }/rest/session", auth=auth
)
session = requests.Session()
session_id = response.json().get("value")
session.headers.update({"api-session-id": session_id})
self._session = session
return session
現在,您只需執行client.session
,它將在第一次訪問時設置,然后在以后重用。
編輯:要堅持這間 RestClient
的情況下,改變為參考self._session
到RestClient._session
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.