对于我的新项目,我决定使用django-userena
我按照userena docs的说明操作。但是我收到了这个错误:
SiteProfileNotAvailable at / accounts / signin /
没有提供例外
并且不知道如何解决它。请帮忙!
答案 0 :(得分:13)
当Django找不到您的个人资料时,您通常会获得SiteProfileNotAvailable
。如“Storing additional information about users”中所述,您需要定义AUTH_PROFILE_MODULE
以指向您的个人资料模型。
答案 1 :(得分:7)
正如wunki恰当地指出的那样,在settings.py文件中定义AUTH_PROFILE_MODULE
以指向UserenaBaseProfile
或UserenaLanguageBaseProfile
的子类非常重要。正如userena教程中所讨论的,这些通常放在新创建的“帐户”项目的models.py文件中。
但是,如果您已提供python manage.py runserver
,我发现AUTH_PROFILE_MODULE
将失败。如果您提供了AUTH_PROFILE_MODULE
但仍然收到SiteProfileNotAvailable错误(在您应用的每个网址上),则可能是因为您未能在settings.py的INSTALLED_APPS
列表中添加“帐户”。
答案 2 :(得分:4)
请尝试以下步骤:
在您的settings.py文件中,将'userena','guardian','easy_thumbnails'添加到您的INSTALLED_APPS元组中。
然后再次在settings.py文件中添加以下内容:
AUTHENTICATION_BACKENDS = (
'userena.backends.UserenaAuthenticationBackend',
'guardian.backends.ObjectPermissionBackend',
'django.contrib.auth.backends.ModelBackend',
)
ANONYMOUS_USER_ID = -1
以上用于让django-guardian工作(另一个自动安装的Django-Userena依赖项来控制权限)
接下来,为您的Django-Userena应用创建一个新应用。在命令提示符shell中,键入:python manage.py startapp accounts
。我们正在为Django-Userena创建一个名为“accounts”的新应用程序。
现在将accounts
添加到settings.py文件中的INSTALLED_APPS元组中。
将以下内容复制到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)
接下来将以下内容添加到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的app'accounts'。 3个登录/注销URL语句告诉Django Django-Userena的URL可以在哪里工作。
将以下内容添加到'urlpatterns'元组下的urls.py中:
(r'^accounts/', include('userena.urls')),
配置您的Django SMTP电子邮件设置,以便在settings.py中使用Gmail:
EMAIL_USE_TLS = True
EMAIL_HOST = 'smtp.gmail.com'
EMAIL_PORT = 587
EMAIL_HOST_USER = 'yourgmailaccount@gmail.com'
EMAIL_HOST_PASSWORD = 'yourgmailpassword'
转到命令提示符shell并键入:
python manage.py check_permissions
运行/ accounts / signin /