标签: django-authentication

在Django中创建用户通知系统

我正在添加一个系统,为下次登录时可以显示的用户留下"通知".我在models.py文件中创建了一个简单的Notification类.我有这个UserInfo类(在相同的models.py中)作为socialauth的一部分将一些属性添加到Django的现有用户系统:

class UserInfo(models.Model):
    user = models.OneToOneField(User, unique=True)
    ...
    reputation = models.IntegerField(null=True, blank=True)

    def add_notification(message):
        notification = Notification(user=self.user, message=message)
        notification.save
Run Code Online (Sandbox Code Playgroud)

当我在控制台中尝试时,我最终得到了这个:

>>> user = User.objects.get(id=14)
>>> user.userinfo.add_notification('you are an awesome intern!')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: add_notification() takes exactly 1 argument (2 given)
>>> 
Run Code Online (Sandbox Code Playgroud)

我在这里错过了什么?我是一个Django noob,所以也许这很简单.谢谢!

django-models django-authentication django-socialauth

9
推荐指数
2
解决办法
1万
查看次数

从Django Auth中的UserChangeForm中排除用户名或密码

我正在试图找出如何从中排除用户名和/或密码的方法UserChangeForm.我试过了两个exclude,fields但我不适用于这两个领域.

这是一些代码:

class ArtistForm(ModelForm):
    class Meta:
        model = Artist
        exclude = ('user',)

class UserForm(UserChangeForm):
    class Meta:
        model = User
        fields = (
            'first_name',
            'last_name',
            'email',
            )
        exclude = ('username','password',)

    def __init__(self, *args, **kwargs):
        self.helper = FormHelper
        self.helper.form_tag = False
        super(UserForm, self).__init__(*args, **kwargs)
        artist_kwargs = kwargs.copy()
        if kwargs.has_key('instance'):
            self.artist = kwargs['instance'].artist
            artist_kwargs['instance'] = self.artist
        self.artist_form = ArtistForm(*args, **artist_kwargs)
        self.fields.update(self.artist_form.fields)
        self.initial.update(self.artist_form.initial)

    def clean(self):
        cleaned_data = super(UserForm, self).clean()
        self.errors.update(self.artist_form.errors)
        return cleaned_data

    def save(self, commit=True):
        self.artist_form.save(commit)
        return super(UserForm, …
Run Code Online (Sandbox Code Playgroud)

django django-forms django-authentication django-users

9
推荐指数
2
解决办法
4414
查看次数

如何使用django-registration和auth在登录时设置会话变量?

我正在使用django-registration将用户登录到我的应用程序中.那部分工作正常.我无法弄清楚的部分是如何在用户登录时设置自定义会话变量.例如,我想填充包含UserProfile数据的变量以及一些其他函数的输出.然后我就可以在后续的视图/模板中使用该信息.

如果有人可以在线指导我或者发布一些示例代码,那就太棒了.

我正在使用django 1.1和Python 2.6

django login django-authentication django-registration

8
推荐指数
1
解决办法
5769
查看次数

如何使用django-allauth访问用户名和配置文件

我正在使用Django和django-allauth进行社交认证.

我已经启动并运行身份验证,但是任何人都可以举例说明如何:

  • 显示已登录用户的名称和头像
  • 将一些信息添加到用户的帐户?

例如,在主页上,我有

{% if user.is_authenticated %}
<li><a href="{% url account_logout %}?next=/">Logout</a></li>
{% endif %}
Run Code Online (Sandbox Code Playgroud)

这正确地显示了Logout链接,但是我如何添加用户的名字和头像?

像(伪代码)的东西:

<p>You're logged in with {{ user.account_provider? }} as {{ user }}.</p>
<img src="{{ user.avatar_url }}" />
Run Code Online (Sandbox Code Playgroud)

然后,如果我想为用户的个人资料添加额外的属性,我该怎么办?我应该使用其他一些Django用户相关的应用程序吗?

谢谢你的帮助.

python django oauth django-authentication

8
推荐指数
2
解决办法
7255
查看次数

数据库错误:没有这样的表:auth_user.扩展AbstractUser并使用模型在admin上注册

我正在尝试使用AbstractUser向Django的标准用户模型添加字段.这是我的代码:

class GUser(AbstractUser):
    uuid = UUIDField(auto=True)
Run Code Online (Sandbox Code Playgroud)

这是成功的,因为从壳我可以说,

>>> a = GUser.objects.all()

>>> a
[<GUser: User1>]

>>> a[0].uuid
UUID('7d1f0b7b52144a2ea20db81ce74741e3')
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是从/ admin注册一个新用户.当我创建一个新用户时,我收到一个数据库错误:

no such table: auth_user
Run Code Online (Sandbox Code Playgroud)

在我了解它之前,这是我的forms.py:

class GUserChangeForm(UserChangeForm):
    class Meta:
        model = get_user_model()

class GUserCreationForm(UserCreationForm):

    class Meta:
        model = get_user_model()

    def clean_username(self):
            username = self.cleaned_data["username"]
            try:
                get_user_model().objects.get(username=username)
            except get_user_model().DoesNotExist:
                return username
            raise forms.ValidationError(self.error_messages['duplicate'])
Run Code Online (Sandbox Code Playgroud)

而我的admin.py:

class GUserAdmin(UserAdmin):
    form = GUserChangeForm
    add_form = GUserCreationForm
    fieldsets = (
        (None, {'fields': [('username', 'password')]}),
        ('Personal info', {'fields': ('is_active','is_staff','is_superuser','groups',    'user_permissions')}),
        ('Important dates', {'fields': ('last_login', 'date_joined')}),
        #('Universal ID', …
Run Code Online (Sandbox Code Playgroud)

django django-forms django-admin django-authentication django-syncdb

8
推荐指数
1
解决办法
6355
查看次数

在Django中使用python-social-auth和电子邮件注册复制电子邮件

我在我的项目中使用python-social-auth和电子邮件注册.对于用户模型,我使用AbstractBaseUser的子类:

class User(AbstractBaseUser):
    USERNAME_FIELD = 'email'


AUTH_USER_MODEL = 'userprofile.User'
Run Code Online (Sandbox Code Playgroud)

但是,如果用他的电子邮件注册的用户(demo@demo.com)和密码尝试使用与同一电子邮件地址关联的Facebook帐户登录,则会收到以下错误:

IntegrityError at /social/complete/facebook/
duplicate key value violates unique constraint "userprofile_user_email_key"
DETAIL:  Key (email)=(demo@demo.com) already exists.

/Users/vera/.virtualenvs/app/lib/python2.7/site-packages/django/core/handlers/base.py in get_response
                    response = wrapped_callback(request, *callback_args, **callback_kwargs) ...
/Users/vera/.virtualenvs/app/lib/python2.7/site-packages/django/views/decorators/csrf.py in wrapped_view
        return view_func(*args, **kwargs) ...
/Users/vera/.virtualenvs/app/lib/python2.7/site-packages/social/apps/django_app/utils.py in wrapper
            return func(request, backend, *args, **kwargs) ...
/Users/vera/.virtualenvs/app/lib/python2.7/site-packages/social/apps/django_app/views.py in complete
                       redirect_name=REDIRECT_FIELD_NAME, *args, **kwargs) ...
/Users/vera/.virtualenvs/app/lib/python2.7/site-packages/social/actions.py in do_complete
                                 *args, **kwargs) ...
/Users/vera/.virtualenvs/app/lib/python2.7/site-packages/social/strategies/base.py in complete
        return self.backend.auth_complete(*args, **kwargs) ...
/Users/vera/.virtualenvs/app/lib/python2.7/site-packages/social/backends/facebook.py in auth_complete
        return self.do_auth(access_token, response, *args, **kwargs) ...
/Users/vera/.virtualenvs/app/lib/python2.7/site-packages/social/backends/facebook.py …
Run Code Online (Sandbox Code Playgroud)

python django django-authentication python-social-auth

8
推荐指数
1
解决办法
2296
查看次数

django用户模型中有多个USERNAME_FIELD

我的自定义用户模型:

class MyUser(AbstractBaseUser):
    username = models.CharField(unique=True,max_length=30)
    email = models.EmailField(unique=True,max_length=75)
    is_staff = models.IntegerField(default=False)
    is_active = models.IntegerField(default=False)
    date_joined = models.DateTimeField(default=None)

    # Use default usermanager
    objects = UserManager()

    USERNAME_FIELD = 'email'
Run Code Online (Sandbox Code Playgroud)

有没有办法指定多个USERNAME_FIELD?有类似的东西['email','username'],用户可以通过电子邮件和用户名登录?

django django-authentication django-users

8
推荐指数
2
解决办法
6832
查看次数

AWS Cognito作为Django身份验证后端

尝试将AWS Cognito用作Django身份验证后端是否有意义?这样做有什么好处?什么是挑战/问题领域?

有没有人朝这个方向做过任何工作?

django django-authentication boto amazon-web-services amazon-cognito

8
推荐指数
1
解决办法
1647
查看次数

用户没有userprofile

所以我用这样的字段扩展了我的用户score:

models.py:

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    score = models.IntegerField(default=0);
Run Code Online (Sandbox Code Playgroud)

这似乎与推荐的方式一致

然后我尝试在我的视图中访问用户userprofile:

views.py:

player = request.user.userprofile
Run Code Online (Sandbox Code Playgroud)

这也似乎与推荐的方式一致.但那是我收到错误的地方:

RelatedObjectDoesNotExist
User has no userprofile.
Run Code Online (Sandbox Code Playgroud)

如果我将userprofile更改为其他内容,我会收到另一个错误:

AttributeError
'User' object has no attribute 'flowerpot'
Run Code Online (Sandbox Code Playgroud)

当我尝试以下代码时:

print request.user
print UserProfile.objects.all()
Run Code Online (Sandbox Code Playgroud)

我得到控制台输出:

post_test1
[]
Run Code Online (Sandbox Code Playgroud)

编辑
我有两个超级用户,
我在扩展用户之前创建了七个用户,在扩展用户之后创建了
一个用户(post_test1).


EDIT_2

你好,我们又见面了!

因此它清楚地表明我需要的是

创建一个post_save处理程序,在创建User对象时创建一个新的配置文件

当我阅读它时,这似乎很简单,转到链接到的页面,其中列出了Django发送的所有信号.我查了一下post_save,它说:

像pre_save一样,但是在save()方法结束时发送.

好吧,所以我查看pre_save,它说:

这是在模型的save()方法的开头发送的.

我的解释是这样的:当我创建我的用户(在我的views.py中)时,应该调用save()方法(到目前为止还没有这种情况),之后应该发送post_save(? )当创建User对象时,它将创建一个新的配置文件!

所以现在我已经准备好开始查看示例,所以我谷歌:
userprofile
这里看起来我应该添加看起来像装饰器的东西userprofile
这里看起来我应该改变多个文件并写一个信号定义?
这个似乎也意味着多个文件(包括signals.py)

它看起来还有更多,然后我第一次想到.这里的任何人都可以解释我是如何做到的,或者向我展示一些关于信号如何工作的好资源?

现在我的create_users视图看起来像这样:

def create_user(request):
    if request.method == "POST":
        form = UserCreationForm(request.POST)
        if form.is_valid(): …
Run Code Online (Sandbox Code Playgroud)

python django django-authentication

8
推荐指数
2
解决办法
1万
查看次数

django 身份验证包:“auth”未注册为命名空间

我正在尝试根据本教程使用用户身份验证构建一个简单的网站,但遇到了上述错误。按照说明,我设置了一个网址如下:

url('^accounts/', include('django.contrib.auth.urls'))
Run Code Online (Sandbox Code Playgroud)

我收到此错误作为回应:'auth' 不是注册的命名空间所以我尝试注册一个命名空间,如教程存储库所示:

url('^accounts/', include('django.contrib.auth.urls', namespace="auth")),
Run Code Online (Sandbox Code Playgroud)

然后我收到错误:在 include() 中指定命名空间而不提供 app_name

我意识到本教程使用的是 django 1.8.3,但我使用的是 2.0。当我在 virtualenv 中切换到相同的 django 版本时,问题得到了解决,但我现在不得不更改项目中的许多其他内容以防止其崩溃。有什么方法可以在不需要 django 1.8 的情况下修复?谢谢。

django django-authentication

8
推荐指数
2
解决办法
1677
查看次数