【问题标题】:Configuring django-userena配置 django-userena
【发布时间】:2011-10-12 04:14:23
【问题描述】:

对于我的新项目,我决定使用django-userena

我按照userena docs 的指示进行操作。但是我收到了这个错误:

SiteProfileNotAvailable at /accounts/signin/

没有提供异常

不知道怎么解决。请帮忙!

【问题讨论】:

    标签: django authentication registration


    【解决方案1】:

    当 Django 找不到您的个人资料时,您通常会收到 SiteProfileNotAvailable。如“Storing additional information about users”中所述,您需要定义 AUTH_PROFILE_MODULE 以指向您配置文件的模型。

    【讨论】:

    • 我无法让它工作。不幸的是,在讨论如何正确设置AUTH_PROFILE_MODULE 时,userena 文档不是很...描述性。通过阅读您的链接,我创建了一个名为“accounts”的应用程序,并将类似于他们的MyProfile 的内容添加到名为UserProfile 的models.py 中。然后在 settings.py 我设置AUTH_PROFILE_MODULE = 'accounts.UserProfile'。但是,当我现在访问我网站上的任何 URL 时,它会引发 SiteProfileNotAvailable 异常。
    • 克里斯,我也遇到了同样的问题,我想我应该分享解决方案,以防其他人遇到这个问题。对我来说,问题是我在安装所有这些新应用程序后忘记了syncdb。然后,一旦我这样做了,我意识到我的accounts/models.py 中有一些拼写错误和缺少导入语句,它没有向我抱怨。一旦我修复了models.py 并成功syncdb'd,一切都很好。
    【解决方案2】:

    正如 wunki 恰当地指出的那样,在 settings.py 文件中定义 AUTH_PROFILE_MODULE 以指向 UserenaBaseProfileUserenaLanguageBaseProfile 的子类非常重要。正如 userena 教程中所讨论的,这些通常放在新创建的“帐户”项目的 models.py 文件中。

    但是,我发现如果您已经提供了AUTH_PROFILE_MODULEpython manage.py runserver 将会失败。如果您提供了AUTH_PROFILE_MODULE,但仍然收到 SiteProfileNotAvailable 错误(在您应用的每个 URL 上),则可能是您未能在 settings.py 中将“帐户”添加到您的 INSTALLED_APPS 列表中。

    【讨论】:

    • 问:“你的 UserenaBaseProfile 或 UserenaBaseProfile 的子类”?这两个不是一样的吗?此外,“setting.py”应该是“settings.py”。另外,欢迎使用 StackOverflow!
    • 您好 Anuj,我修复了您指出的两个错误。感谢您指出。
    • 这个答案为我节省了大量时间。当我按照安装说明进行操作时,我没有意识到我忘记添加帐户应用程序;完全忽略了它!
    【解决方案3】:

    尝试以下步骤:

    1. 在 settings.py 文件中,将 'userena'、'guardian'、'easy_thumbnails' 添加到 INSTALLED_APPS 元组中。

    2. 然后再次在您的 settings.py 文件中,添加以下内容:

      AUTHENTICATION_BACKENDS = (  
          'userena.backends.UserenaAuthenticationBackend',  
          'guardian.backends.ObjectPermissionBackend',  
          'django.contrib.auth.backends.ModelBackend',  
      )  
      
      ANONYMOUS_USER_ID = -1  
      

    以上内容用于让 django-guardian 工作(另一个 Django-Userena 依赖项,自动安装以控制权限)

    1. 接下来,为您的 Django-Userena 应用程序创建一个新应用程序。在命令提示符 shell 中,键入:python manage.py startapp accounts。我们正在为 Django-Userena 创建一个名为“accounts”的新应用程序。

    2. 现在将 accounts 添加到 settings.py 文件中的 INSTALLED_APPS 元组中。

    3. 将以下内容复制到accounts/models.py:

      from django.contrib.auth.models import User  
      from django.utils.translation import ugettext as _  
      from userena.models import UserenaBaseProfile  
      
      class MyProfile(UserenaBaseProfile):  
          user = models.OneToOneField(User,unique=True,  
                        verbose_name=_('user'),related_name='my_profile')  
          favourite_snack = models.CharField(_('favouritesnack'),max_length=5)  
      
    4. 接下来将以下内容添加到 settings.py 文件中:

      AUTH_PROFILE_MODULE = 'accounts.MyProfile'  
      
      LOGIN_REDIRECT_URL = '/accounts/%(username)s/'  
      LOGIN_URL = '/accounts/signin/'  
      LOGOUT_URL = '/accounts/signout/'  
      

    AUTH_PROFILE_MODULE 中的“accounts.MyProfile”是指包含我们之前定义的模型类 MyProfile 的应用程序“accounts”。 3 个登录/注销 URL 语句告诉 Django 哪里有 Django-Userena 工作的 URL。

    1. 在“urlpatterns”元组下的 urls.py 中添加以下内容:

      (r'^accounts/', include('userena.urls')),  
      
    2. 在 settings.py 中配置您的 Django SMTP 电子邮件设置以使用 Gmail:

      EMAIL_USE_TLS = True  
      EMAIL_HOST = 'smtp.gmail.com'  
      EMAIL_PORT = 587  
      EMAIL_HOST_USER = 'yourgmailaccount@gmail.com'  
      EMAIL_HOST_PASSWORD = 'yourgmailpassword'  
      
      1. 转到您的命令提示符 shell 并输入:

        python manage.py check_permissions

    运行 /accounts/signin/

    【讨论】:

      猜你喜欢
      • 2013-07-14
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-30
      相关资源
      最近更新 更多