Как вызвать другие методы в классе в django, когда self не указан в качестве аргумента
Я пришел из PHP/Laravel Background, где для вызова методов или доступа к свойствам внутри класса достаточно использовать ключевое слово $this. В python3/Django4.0.6 я должен использовать request в качестве первого параметра для получения тела запроса. например,
class CustomAuth:
def verifyToken(token):
pass
def login(request):
data = request.body
# how do i call verifyToken?
# if i use self as first argument then i am not able to access the request
Это было бы относительно стандартно, исходя из того, о чем вы спрашиваете:
class CustomAuth:
def verifyToken(self, token):
self.token = token
def login(self, request):
self.request = request
data = request.body
# how do i call verifyToken?
x = self.verifyToken(self.token)
# if i use self as first argument then i am not able to access the request
r = self.request
Также обратите внимание на комментарии, предлагающие метод @staticmethod
в качестве альтернативы.
Смысл "self" в том, чтобы связать функции и переменные с экземпляром. Если ваша функция не использует внутренние переменные класса или другие функции, вы можете украсить ее @staticmethod и будете обращаться к ней как обычно.
Для получения более подробной информации погуглите. https://www.w3schools.com/python/gloss_python_self.asp#:~:text=The%20self%20parameter%20is%20a,that%20belongs%20to%20the%20class.
Мне кажется странным то, как вы используете класс. Почему бы вам не инстанцировать класс с параметром token, и не использовать функцию для присвоения token внутренней переменной класса.
Спасибо всем! Проблема была в том, что я не инстанцировал класс AuthService. Ранее мой urls.py для этого модуля auth выглядел так
from django.urls import path
from .service import AuthService
urlpatterns = [
path('login',AuthService.login,name='login'),
]
, который я изменил на следующий
from django.urls import path
from .service import AuthService
auth = AuthService()
urlpatterns = [
path('login',auth.login,name='login'),
]
теперь это работает нормально
def login(self, request):