标签: django-authentication

使用Django中的自定义字段扩展用户模型

使用自定义字段扩展User模型(与Django的身份验证应用程序捆绑在一起)的最佳方法是什么?我也可能希望使用该电子邮件作为用户名(用于身份验证).

我已经看到了一些 方法,但无法决定哪一个是最好的.

django django-models django-authentication django-users

415
推荐指数
10
解决办法
20万
查看次数

如何在基于django类的视图上使用permission_required装饰器

我在理解新CBV如何工作方面遇到了一些麻烦.我的问题是,我需要登录所有视图,其中一些是特定权限.在基于函数的视图中,我使用@permission_required()和视图中的login_required属性执行此操作,但我不知道如何在新视图上执行此操作.django文档中是否有一些部分解释了这一点?我没找到任何东西.我的代码有什么问题?

我尝试使用@method_decorator,但它回复" / errors/prueba/_wrapped_view()中的TypeError至少需要1个参数(0给定) "

这是代码(GPL):

from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required, permission_required

class ViewSpaceIndex(DetailView):

    """
    Show the index page of a space. Get various extra contexts to get the
    information for that space.

    The get_object method searches in the user 'spaces' field if the current
    space is allowed, if not, he is redirected to a 'nor allowed' page. 
    """
    context_object_name = 'get_place'
    template_name = 'spaces/space_index.html'

    @method_decorator(login_required)
    def get_object(self):
        space_name = self.kwargs['space_name']

        for i in self.request.user.profile.spaces.all():
            if i.url …
Run Code Online (Sandbox Code Playgroud)

django django-views django-authentication django-class-based-views class-based-views

151
推荐指数
6
解决办法
8万
查看次数

在Django中,如何检查用户是否在某个组中?

我在Django的管理站点中创建了一个自定义组.

在我的代码中,我想检查用户是否在此组中.我怎么做?

python django django-authentication

132
推荐指数
7
解决办法
10万
查看次数

如何在Django中获取当前登录用户的用户ID?

如何获取当前登录用户的ID?

models.py:

class Game(models.model):
    name = models.CharField(max_length=255)
    owner = models.ForeignKey(User, related_name='game_user', verbose_name='Owner')
Run Code Online (Sandbox Code Playgroud)

views.py:

gta = Game.objects.create(name="gta", owner=?)
Run Code Online (Sandbox Code Playgroud)

django django-models django-authentication

111
推荐指数
3
解决办法
14万
查看次数

使用Django auth UserAdmin作为自定义用户模型

来自Django.Contrib.Auth文档:

扩展Django的默认用户 如果您对Django的用户模型完全满意并且只想添加一些其他配置文件信息,您可以简单地子类化django.contrib.auth.models.AbstractUser并添加自定义配置文件字段.此类提供默认用户的完整实现作为抽象模型.

说完了.我创建了一个如下所示的新模型:

class MyUser(AbstractUser):
  some_extra_data = models.CharField(max_length=100, blank=True)
Run Code Online (Sandbox Code Playgroud)

这显示在管理员中几乎像Django的标准User.但是,admin中最重要的区别是密码 - (重新)设置字段不存在,而是显示正常的CharField.我是否真的必须覆盖admin-config中的内容才能使其正常工作?如果是这样,我怎么能以某种干燥的方式做到这一点(即没有从Django源中复制东西......等等......)?

django django-models django-admin django-authentication django-custom-user

73
推荐指数
4
解决办法
5万
查看次数

检查Django中模板内的权限

我可以在Django的模板中使用Auth应用程序的权限检查吗?(我想在特权用户的模板末尾显示一个简单的表单)

更重要的是,我应该这样做还是不是"Django方式"?

django django-authentication

72
推荐指数
3
解决办法
5万
查看次数

如何强制用户在django中注销?

在我的django应用程序中,在某些条件下,我需要能够通过用户名强制用户注销.不一定是当前登录的用户,而是其他一些用户.因此,我视图中的请求方法没有关于我要注销的用户的任何会话信息.

我熟悉django.auth,并使用auth.logout方法,但它将请求作为参数.如果我拥有的是用户名,是否有"django-way"来记录用户?或者我必须滚动自己的注销sql?

django django-authentication

70
推荐指数
5
解决办法
3万
查看次数

Django的self.client.login(...)在单元测试中不起作用

我已经通过两种方式为我的单元测试创​​建了用户:

1)为"auth.user"创建一个看起来大致如下的夹具:

    { 
        "pk": 1, 
        "model": "auth.user", 
        "fields": { 
            "username": "homer", 
            "is_active": 1, 
            "password": 
"sha1$72cd3$4935449e2cd7efb8b3723fb9958fe3bb100a30f2", 
            ... 
        } 
    }
Run Code Online (Sandbox Code Playgroud)

我遗漏了看似不重要的部分.

2)在setUp函数中使用'create_user'(尽管我宁愿将所有内容保存在我的fixtures类中):

def setUp(self): 
       User.objects.create_user('homer', 'ho...@simpson.net', 'simpson') 
Run Code Online (Sandbox Code Playgroud)

请注意,在这两种情况下密码都是simpson.

我已经验证了这个信息一次又一次正确地加载到测试数据库中.我可以使用User.objects.get获取User对象.我可以使用'check_password'验证密码是否正确.用户处于活动状态.

然而,self.client.login(username ='homer',password ='simpson')FAILS总是如此.我很困惑为什么.我想我已经阅读了与此相关的每一个互联网讨论.有人可以帮忙吗?

单元测试中的登录代码如下所示:

    login = self.client.login(username='homer', password='simpson') 
    self.assertTrue(login) 
Run Code Online (Sandbox Code Playgroud)

谢谢.

django unit-testing django-authentication django-testing

69
推荐指数
4
解决办法
3万
查看次数

手动登录没有密码的用户

我希望你能帮助我找到在使用密码的情况下实现手动(服务器端启动)登录的最佳方法.让我解释一下工作流程:

  • 用户注册
  • 谢谢!已发送包含激活链接的电子邮件blablabla
  • (帐户现在存在但标记为未启用)
  • 用户打开电子邮件,点击链接
  • (帐户已启用)
  • 谢谢!您现在可以使用该网站

我想要做的是在用户点击电子邮件链接后登录用户,这样他就可以立即开始使用该网站.

我不能使用他的密码,因为它是在DB中加密的,是编写自定义身份验证后端的唯一选择吗?

django login django-authentication email-confirmation

66
推荐指数
3
解决办法
3万
查看次数

django的auth_user.username可以是varchar(75)吗?怎么可能这样呢?

这有什么错上运行ALTER TABLE auth_userusernamevarchar(75)因此它可以适应的电子邮件?如果有什么事情会破坏什么?

如果您要更改auth_user.usernamevarchar(75)您需要修改django的位置?这只是在源代码中改变30到75的问题吗?

username = models.CharField(_('username'), max_length=30, unique=True, help_text=_("Required. 30 characters or fewer. Letters, numbers and @/./+/-/_ characters"))
Run Code Online (Sandbox Code Playgroud)

或者这个领域是否还有其他验证需要更改或其他任何后果?

请参阅下面与bartek的评论讨论,了解这样做的原因.

编辑:经过几个月的回顾.对于不了解前提的人:某些应用程序没有要求或希望使用用户名,他们只使用电子邮件进行注册和验证.不幸的是,在django auth.contrib中,用户名是必需的.您可以开始在用户名字段中添加电子邮件,但该字段只有30个字符,而现实世界中的电子邮件可能很长.可能比这里建议的75个字符更长,但75个字符可以容纳最理智的电子邮件地址.问题针对的是这种情况,正如基于电子邮件授权的应用程序所遇到的那样.

django django-models django-authentication

65
推荐指数
4
解决办法
2万
查看次数