我在django中有一个扩展的UserProfile模型:
class UserProfile(models.Model):
user = models.ForeignKey(User, unique=True)
#other things in that profile
Run Code Online (Sandbox Code Playgroud)
还有一个signals.py:
from registration.signals import user_registered
from models import UserProfile
from django.contrib.auth.models import User
def createUserProfile(sender, instance, **kwargs):
profile = users.models.UserProfile()
profile.setUser(sender)
profile.save()
user_registered.connect(createUserProfile, sender=User)
Run Code Online (Sandbox Code Playgroud)
我确保信号通过以下方式注册__init__.py
:
import signals
Run Code Online (Sandbox Code Playgroud)
那么应该为每个注册的用户创建一个新的UserProfile,对吧?但事实并非如此.我尝试登录时总是得到"UserProfile匹配查询不存在"错误,这意味着数据库条目不存在.
我应该说我使用django-registration,它提供user_registered信号.
重要应用程序的结构是,我有一个名为"users"的应用程序,我有:models.py,signals.py,urls.py和views.py(以及其他一些在这里无关紧要的事情) ).UserProfile类在models.py中定义.
更新:我将signals.py更改为:
from django.db.models.signals import post_save
from models import UserProfile
from django.contrib.auth.models import User
def create_profile(sender, **kw):
user = kw["instance"]
if kw["created"]:
profile = UserProfile()
profile.user = user
profile.save()
post_save.connect(create_profile, sender=User)
Run Code Online (Sandbox Code Playgroud)
但现在我得到了"IntegrityError":
"列user_id不是唯一的"
编辑2:
我找到了.看起来我以某种方式注册了两次信号.此处描述了解决方法: …
从django模板获取用户信息的最佳方法是什么?
例如,如果我只想:
我正在使用django-registration/authentication
我正在关注Django 1.3 Web开发.并且对于登录,我收到以下错误
Forbidden (403)
CSRF verification failed. Request aborted.
Help
Reason given for failure:
CSRF token missing or incorrect.
Run Code Online (Sandbox Code Playgroud)
这是我的settings.py包含的APPS.这本书应该是这样说的.
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
'djangocricket.Cricket',
'djangocricket.cms'
)
Run Code Online (Sandbox Code Playgroud)
这本书说,它应该包含,django.contrib.auth.views.login ..我把它包括在内
urlpatterns = patterns('',
# Examples:
url(r'^$', 'djangocricket.Cricket.views.index', name='default'),
url(r'^user/(\w+)/$', 'djangocricket.Cricket.views.user_home', name='user home'),
url(r'^login/$', 'django.contrib.auth.views.login'),
# url(r'^djangocricket/', include('djangocricket.foo.urls')),
# Uncomment the admin/doc line below to …
Run Code Online (Sandbox Code Playgroud) 如何使用django-registration使用电子邮件而不是用户名进行身份验证.
进一步说明如何在安装注册模块后强制执行此更改.
我在这里编辑解决方案任何人都知道一个好的黑客,使django注册使用电子邮件作为用户名吗?在lib文件夹中?
我正在尝试将django.contrib.auth用户与我自己的UserProfile连接,当我访问该网站时,我收到了"AlreadyRegistered"错误.
这是追溯:
Environment:
Request Method: GET
Request URL: myurl.com/django/appname/
Django Version: 1.4.2
Python Version: 2.6.8
Installed Applications:
('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'polls',
'appname',
'registration',
'django.contrib.humanize')
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 "/usr/lib/python2.6/site-packages/django/core/handlers/base.py" in get_response
101. request.path_info)
File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py" in resolve
298. for pattern in self.url_patterns:
File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py" in url_patterns
328. patterns = getattr(self.urlconf_module, "urlpatterns", self.urlconf_module)
File "/usr/lib/python2.6/site-packages/django/core/urlresolvers.py" in urlconf_module
323. self._urlconf_module = import_module(self.urlconf_name)
File "/usr/lib/python2.6/site-packages/django/utils/importlib.py" in import_module
35. __import__(name)
File "/var/www/mysite/mysite/urls.py" in <module>
3. …
Run Code Online (Sandbox Code Playgroud) 我正在使用Django-nonrel和注册应用程序.事情似乎工作正常,除非我尝试重置密码.当点击发送给我的重置密码链接时,Django会产生错误信息:
password_reset_confirm() got an unexpected keyword argument 'uidb36'
Run Code Online (Sandbox Code Playgroud)
我的问题:有没有人看过它,知道什么是治愈方法?
编辑:
这个问题是由registration\auth_urls.py引起的 - 它们复制了django\contrib\auth\urls.py中的条目,在Django-nonrel中循环修补了该文件的版本.
任何想法为什么它在那里,我可以实际删除它或修复它否则?
有没有人一起使用django-social-auth,django-registration和django-profiles.他们一起工作得好吗?我已经建立了社交认证,但我在某处读到django-allauth更好.我应该切换到那个吗?
请指教
更新:
我已经allauth
在我的项目中使用它并且工作正常.您不需要使用django-registration
allauth,因为它集成在内.但是,我使用自定义用户配置文件,这是一个比...更好的选择django-profiles
.
我注意到在我登录Django注册后,它重定向到我accounts/profile/
.默认情况下Django注册url.py
没有处理accounts/profile/
,所以我需要创建自己的.
实际上这个问题有三个方面:
accounts/profile/
?有办法改变吗?成功登录后,我希望Django能够在登录页面之前重定向回页面.accounts/profile/
,那么我应该把它放在哪里?Django的内置users
(auth_user
)在项目中的所有Django应用程序之间共享,所以我应该将它view.py
放在项目文件夹中而不是放在app文件夹中吗?account/profiles/
?我已经User
用自己的方式扩展了Django的课程UserProfile
,但它更像是User
桌面上的其他字段而不是实际的"配置文件"(我没有创建头像或类似的东西,只是简单的东西,如地址和电话号码,但最重要的是,一些我的应用依赖的自定义用户类型.我在这里关注Django文档以实现一个简单的目标:创建新用户后立即创建用户配置文件.
我有一个'帐户'应用程序,我的accounts.models看起来像这样:
# -*- coding: utf-8 -*-
from django.db import models
from django.db.models.signals import post_save
from django.contrib.auth.models import User
from main.models import Store
class UserProfile(models.Model):
GENRE_CHOICES = (
('m', 'Masculino'),
('f', 'Feminino'),
)
MARITAL_STATUS_CHOICES = (
('s', 'Solteiro'),
('c', 'Casado'),
('d', 'Divorciado'),
('v', 'Viúvo'),
)
user = models.ForeignKey(User, unique=True)
birth_date = models.DateField()
genre = models.CharField(max_length=1, choices=GENRE_CHOICES)
address = models.CharField(max_length=150)
postal_code_4 = models.PositiveIntegerField()
postal_code_3 = models.PositiveIntegerField()
locatity = models.CharField(max_length=30)
marital_status = models.CharField(max_length=1, choices=MARITAL_STATUS_CHOICES)
child_amount = models.PositiveSmallIntegerField()
is_merchant = models.BooleanField(default=False) …
Run Code Online (Sandbox Code Playgroud) 可能是一个糟糕的问题,但我正在使用Django的UserCreationForm(略微修改为包含电子邮件),我想删除Django自动在HTML页面上显示的help_text.
在我的HTML页面的注册部分,它有用户名,电子邮件,密码1和密码2字段.但是在用户名下面是"必需的.不超过30个字符.字母,数字和@ ...".在密码确认(密码2)下,它显示"输入与上面相同的密码进行验证".
我该如何删除这些?
#models.py
class UserCreateForm(UserCreationForm):
email = forms.EmailField(required=True)
def save(self, commit=True):
user = super(UserCreateForm, self).save(commit=False)
user.email = self.cleaned_data['email']
if commit:
user.save()
return user
class Meta:
model = User
fields = ("username", "email", "password1", "password2")
exclude = ('username.help_text')
#views.py
def index(request):
r = Movie.objects.all().order_by('-pub_date')
form = UserCreateForm()
return render_to_response('qanda/index.html', {'latest_movie_list': r, 'form':form}, context_instance = RequestContext(request))
#index.html
<form action = "/home/register/" method = "post" id = "register">{% csrf_token %}
<h6> Create an account </h6>
{{ form.as_p }}
<input type = …
Run Code Online (Sandbox Code Playgroud)