带有 pinax-referrals 的 Django 推荐系统?
Django referral system with pinax-referrals?
我正在尝试在我的 Django 项目中创建推荐系统。我发现这个任务非常有趣的应用程序 (pinax-referrals) 并想测试它。
从文档中看不清楚如何正确使用它,也没有示例。据我了解,我们需要采取后续步骤:
1) 使用以下代码创建 Profile
模型:
from django.contrib.auth.models import User
from django.dispatch import receiver
from account.signals import user_signed_up # django-user-account app
from pinax.referrals.models import Referral
class Profile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
referral = models.OneToOneField(Referral, null=True, on_delete=models.CASCADE)
@receiver(user_signed_up)
def handle_user_signed_up(sender, user, form, **kwargs):
Referral.create(redirect_to=user.profile.get_absolute_url())
2) 创建自定义注册视图:
from account.views import SignupView
from pinax.referrals.models import Referral
class RegistrationView(SignupView):
def after_signup(self, form):
super(RegistrationView, self).after_signup(form)
Referral.record_response(self.request, "USER_SIGNUP")
我的步骤有多正确?能举个简单的例子吗?
据我所知,这个问题对某些人来说很有趣。这就是我决定分享信息的原因。几年前,我创建了一个简单的 Django project,它使用 pinax-referrals
包作为推荐系统。我希望这个项目能对某人有所帮助。
我曾尝试在这方面使用你的想法,但我遇到了一些错误
File "C:\Users\n\PycharmProjects\Elijahs_Agnes\venv\lib\site-packages\django\db\models\query.py", line 435, in get
raise self.model.DoesNotExist(
App1.models.Profile.DoesNotExist: Profile matching query does not exist.
和
File "C:\Users\n\AppData\Local\Programs\Python\Python38\lib\logging\config.py",
line 570, in configure
raise ValueError('Unable to configure handler '
ValueError: Unable to configure handler 'debug'
我正在使用这个记录器
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'simple': {
'format': '[%(asctime)s] | %(levelname)s | %(message)s',
'datefmt': '%d/%b/%Y %H:%M:%S',
},
},
'handlers': {
'debug': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'logging/debug.log',
'maxBytes': 1024*1024*5,
'formatter': 'simple',
},
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'logging/error.log',
'maxBytes': 1024*1024*5,
'formatter': 'simple',
},
},
'loggers': {
'django': {
'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'),
'handlers': ['debug', 'error'],
},
},
}
我正在尝试在我的 Django 项目中创建推荐系统。我发现这个任务非常有趣的应用程序 (pinax-referrals) 并想测试它。
从文档中看不清楚如何正确使用它,也没有示例。据我了解,我们需要采取后续步骤:
1) 使用以下代码创建 Profile
模型:
from django.contrib.auth.models import User
from django.dispatch import receiver
from account.signals import user_signed_up # django-user-account app
from pinax.referrals.models import Referral
class Profile(models.Model):
user = models.OneToOneField(User,on_delete=models.CASCADE)
referral = models.OneToOneField(Referral, null=True, on_delete=models.CASCADE)
@receiver(user_signed_up)
def handle_user_signed_up(sender, user, form, **kwargs):
Referral.create(redirect_to=user.profile.get_absolute_url())
2) 创建自定义注册视图:
from account.views import SignupView
from pinax.referrals.models import Referral
class RegistrationView(SignupView):
def after_signup(self, form):
super(RegistrationView, self).after_signup(form)
Referral.record_response(self.request, "USER_SIGNUP")
我的步骤有多正确?能举个简单的例子吗?
据我所知,这个问题对某些人来说很有趣。这就是我决定分享信息的原因。几年前,我创建了一个简单的 Django project,它使用 pinax-referrals
包作为推荐系统。我希望这个项目能对某人有所帮助。
我曾尝试在这方面使用你的想法,但我遇到了一些错误
File "C:\Users\n\PycharmProjects\Elijahs_Agnes\venv\lib\site-packages\django\db\models\query.py", line 435, in get
raise self.model.DoesNotExist(
App1.models.Profile.DoesNotExist: Profile matching query does not exist.
和
File "C:\Users\n\AppData\Local\Programs\Python\Python38\lib\logging\config.py",
line 570, in configure
raise ValueError('Unable to configure handler '
ValueError: Unable to configure handler 'debug'
我正在使用这个记录器
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'simple': {
'format': '[%(asctime)s] | %(levelname)s | %(message)s',
'datefmt': '%d/%b/%Y %H:%M:%S',
},
},
'handlers': {
'debug': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'logging/debug.log',
'maxBytes': 1024*1024*5,
'formatter': 'simple',
},
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': 'logging/error.log',
'maxBytes': 1024*1024*5,
'formatter': 'simple',
},
},
'loggers': {
'django': {
'level': os.getenv('DJANGO_LOG_LEVEL', 'DEBUG'),
'handlers': ['debug', 'error'],
},
},
}