【问题标题】:Auto referral code generator in djangodjango 中的自动推荐代码生成器
【发布时间】:2014-04-27 04:41:48
【问题描述】:

我在我的一个 django 项目中使用 userena。我决定在我的项目中包含一个自动推荐代码生成器选项。你知道,要使用 userena,我们必须创建一个额外的 django 应用程序并且必须创建一个配置文件模型。因此,我创建了一个名为 account 的应用程序,我的模型就是这样,

import uuid
import base64
from django.db import models
from django.contrib.auth.models import User
from django.utils.translation import ugettext_lazy as _
from django.db.models.signals import post_save
from userena.models import UserenaBaseProfile
from userena.utils import user_model_label 

class MyProfile(UserenaBaseProfile):  
    user = models.OneToOneField(User,unique=True,  
                           verbose_name=_('user'),related_name='my_profile')  
    favourite_snack = models.CharField(_('favourite snack'),max_length=5)

提到,这是之前我为自动推荐代码生成器添加功能的模型。然后我决定添加一些功能来为每个用户生成推荐代码与注册。这就是为什么我在我的模型中添加了一些功能,就像那样......

import uuid
import base64
from django.db import models
from django.contrib.auth.models import User
from django.utils.translation import ugettext_lazy as _
from django.db.models.signals import post_save
from userena.models import UserenaBaseProfile
from userena.utils import user_model_label 

class MyProfile(UserenaBaseProfile):  
    user = models.OneToOneField(User,unique=True,  
                        verbose_name=_('user'),related_name='my_profile')  
    favourite_snack = models.CharField(_('favourite snack'),max_length=5)
    referral_code = models.CharField(max_length=300, blank=True, null=True)

    def get_absolute_url(self):
        return u'/profile/show/%d' % self.id
    def generate_verification_code(self):
        return base64.urlsafe_b64encode(uuid.uuid1().bytes.encode("base64").rstrip())[:25]
    def save(self, *args, **kwargs):
        if not self.pk:
            self.referral_code = self.generate_verification_code()
        elif not self.verification_code:
            self.referral_code = self.generate_verification_code()
        return super(MyProfile, self).save(*args, **kwargs) 

现在注册后会为每个用户生成一个唯一的推荐代码。这很好,我对此没有任何问题,但是因为这个 MyProfile(鉴于上面)模型与 userena 相关,可能这就是为什么(实际上我不确定)我面临错误

'MyProfile' object has no attribute 'verification_code'

我正面临上述错误,同时我正在尝试使用默认 userena 个人资料编辑选项编辑我的个人资料。

我再次提及,上述错误发生同时我正在尝试使用默认 userena 个人资料编辑选项编辑我的个人资料

我也在发布引用..

环境:

请求方法:POST 请求网址:http://www.myproject.com/accounts/veer/edit/

Django Version: 1.5.5
Python Version: 2.7.4
Installed Applications:
('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'photo',
'userena',
'guardian',
'easy_thumbnails',
'accounts',
'cloudinary',
'paypal.standard.ipn',
'myprofile',
'watermarker',
'mail',
'stored_messages',
'rest_framework',
'endless_pagination')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "/codes/A/test/shutterstock/django/core/handlers/base.py" in get_response
115.                         response = callback(request, *callback_args,        **callback_kwargs)
File "/codes/A/test/shutterstock/userena/decorators.py" in _wrapped_view
28.         return view_func(request, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/django_guardian-1.1.1- py2.7.egg/guardian/decorators.py" in _wrapped_view
106.             return view_func(request, *args, **kwargs)
File "/codes/A/test/shutterstock/userena/views.py" in profile_edit
711.             profile = form.save()
File "/codes/A/test/shutterstock/userena/forms.py" in save
241.         profile = super(EditProfileForm, self).save(commit=commit)
File "/codes/A/test/shutterstock/django/forms/models.py" in save
370.                              fail_message, commit, construct=False)
File "/codes/A/test/shutterstock/django/forms/models.py" in save_instance
87.         instance.save()
File "/codes/A/test/shutterstock/accounts/models.py" in save
23.             elif not self.verification_code:

Exception Type: AttributeError at /accounts/veer/edit/
Exception Value: 'MyProfile' object has no attribute 'verification_code'

现在我的问题是,是否有任何其他方式可以通过注册或任何其他方式生成推荐代码,使用 userena 或者是否有任何解决我当前问题的方法**?

【问题讨论】:

  • 你能发布回溯吗?
  • 你可以看到,我已经编辑了我的帖子并添加了引用@skzryzg

标签: python django


【解决方案1】:

你有一个错字:

elif not self.verification_code:

应该是:

elif not self.referral_code:

以下不是解决方案,但您还询问了替代方案。

如果您只想在注册时生成一次代码(而不是在它为空或无时生成它),您可以直接在字段中设置默认值:

referral_code = models.CharField(
    max_length=300, 
    blank=True, 
    null=True, 
    default = base64.urlsafe_b64encode(uuid.uuid1().bytes.encode("base64").rstrip())[:25])

对于get_absolute_url,我强烈建议您使用带有命名网址的reverse,而不是硬编码其中的路径。例如,如果您有一组名为“profile”的网址,其中一个名为“show”它看起来像这样:

def get_absolute_url(self):
    from django.core.urlresolvers import reverse
    return reverse("profile:show", args =(self.id,))

你的主要 urls.py 会有一个条目:

  url(r'^profile/', include(profile.urls), name = "profile"),

并且 profile.urls 会有:

  url(r'^show/(?P<id>\d+)/$', view_name, name = "show),

【讨论】:

    猜你喜欢
    • 2023-03-22
    • 1970-01-01
    • 2015-09-12
    • 2010-10-04
    • 1970-01-01
    • 1970-01-01
    • 2011-07-14
    • 2015-04-19
    • 1970-01-01
    相关资源
    最近更新 更多