问题标签 [django-authentication]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
562 浏览

django - 我应该使用什么类型的模型设计来向用户添加角色,使其在 Django 和 Django 管理员中有效

我正在使用 Django 的默认身份验证系统 (django.contrib.auth),我想以 Django Admin 可以使用的方式向我的用户添加“角色”。

一个例子:

  • 用户可以是工作人员教师学生和/或家长
  • 如果用户分配了角色,他将获得权限(例如,员工可以登录 Django 管理员)
  • 某些角色可能有一些额外的字段(例如,父母与至少一个学生有关系,并且每个学生都有一个与其班级组相关的字段
  • 并非每个角色都有额外的字段
  • 家长可以是老师工作人员,反之亦然
  • 学生不能担任其他角色

有各种(常规)方法可以在模型中完成上述任务。Django 支持很多,但 Django 管理员不支持。Django admin 有很多很好的功能,所以我想使用它(但我越来越害怕它不可能)。

下面的模型是我一开始想到的:

这适用于 Django(以及许多其他基于 MVC 的框架)。但我找不到在管理员中显示上述内容的正确方法。

理想情况下,我想添加一个用户,然后在用户更改视图中添加不同的角色。起初我以为我可以使用内联:

然后,我对内联模板进行了一些细微的更改,以显示带有标题“添加学生角色”的编辑用户按钮。一旦我们点击按钮,我们就会显示表单并添加一个用户角色。不理想,但它有效。

太糟糕了,对于员工来说,没有字段可以添加到内联表单中。这样就不可能触发内联表单的“has_changed”属性。这会导致新角色未保存到数据库中。

为了解决最后一个问题,我稍微修改了一下,在空的用户角色中添加了一个“虚拟”表单域,然后使用 JS 隐藏这个域。这确实触发了 has_changed。

但这仍然无法在以后的一些测试中以某种方式保存我的内联模型。

所以我认为我只是做错了。我做了很多谷歌搜索,发现很多人都在为同样的问题而烦恼。最适合我的情况是http://www.mail-archive.com/django-users@googlegroups.com/msg52867.html。但是这个解决方案仍然没有给我一个简单的方法来实现管理员。

我也考虑过使用内置组,但在这种情况下,我不知道应该如何添加不同的字段。

我想到的另一件事是尝试“添加学生”而不是添加用户并为他分配角色。如果您只是继承用户,这在管理员中效果很好:

但是这里有两个问题。起初,不可能既是工作人员又是老师。其次,在 Django 的其余部分中,请求对象返回的用户对象实际上并不能正常工作,无法为其请求学生、父母、员工对象。获得其中之一的唯一方法是基于 User 对象实例化一个新的 Student 对象。

所以这里有一个问题:我应该使用哪种类型的模型设计来向用户添加角色,以便它在 Django 和 Django 管理员中工作?

友好的问候, Wout

0 投票
1 回答
2483 浏览

django - Django 内置登录视图和错误

我正在使用django.contrib.auth.views.login and .logout视图。非常方便,开箱即用,将再次部署 AAA+ 等。

出现问题是因为我没有使用单独的登录页面,而是在每个页面中都有一个登录框(当然,除非用户已登录)。因此,当用户名/密码组合错误时,我会收到错误消息。我应该选择这三个路径中的哪一个?

  • 有一种秘密方法可以重定向到下一个,不仅在成功时,而且在错误时。如果是这样,请告诉我!
  • 我编写了自己的登录视图,同时使用了 Django 的消息系统
  • 我编写了一个登录页面(嗯,它只是缺少一个模板),所以我可以充分利用 Django 身份验证系统的强大功能。
0 投票
1 回答
66 浏览

django-admin - django app同时创建auth.user和app user,并将auth.user_id存储在app.user中

我有一个通过 auth.user 和应用程序将用户添加到系统的应用程序。保存时,我想创建用户,然后获取 auth.user.id 并将其添加到 team_user.id。

我一直在尝试下面的代码,却一无所获。关于我做错了什么的任何建议?请指教。

0 投票
1 回答
1207 浏览

django - Django:使用 first_name.last_name 创建一个干净的用户名

username我的网站最好使用first_name.last_name形式的规范化用户名,而不是花哨。

使用这种用户名创建新用户很简单

但是清理这两个字段以使其包含的最佳方法是:

  1. 没有空格 ex: Théodore de Banville
  2. 没有口音前:Raphaël LeBlond
  3. 任何其他有问题的字符

我想过使用reand unidecode

但这足够了吗?

编辑:这是我目前的解决方案:

0 投票
1 回答
203 浏览

django - Django 表单总是失败

我正在尝试使用 Django 的内置身份验证模块。对于我正在开发的网站,我想使用电子邮件地址作为登录名,而不仅仅是它们通常设置的普通字母数字字段。为了做到这一点,我将所有字符串字段更改为电子邮件字段,并将它们的最大长度从 30 更改为 320。我的注册码似乎工作正常,但我的登录码却没有。这是我现在正在使用的:

无论我提交什么, form.is_valid() 都返回 FALSE 但 form.errors 为空。有什么想法可能是错的吗?我想我将所有内容都更改为电子邮件属性,所以我不认为就是这样。此外,如果它改变了我试图在谷歌应用引擎上使用djangoappengine执行此操作的任何内容。

0 投票
2 回答
15768 浏览

django - 渲染时 NoReverseMatch:“django.contrib.auth.views.login”的反向

我正在使用 Django 的身份验证,并且在 login.html 模板中,以下语句正在生成错误:

/login 处的 TemplateSyntaxError

渲染时捕获 NoReverseMatch:“django.contrib.auth.views.login”的反向参数“()”和关键字参数“{}”未找到。

这个 url 在我的 urls.py 中定义:

我已经安装了认证系统:

有任何想法吗?

0 投票
4 回答
863 浏览

python - Django 中有多个配置文件?

是否可以将 Django 的用户身份验证功能与多个配置文件一起使用?

目前我有一个 settings.py 文件,其中包含:

和一个models.py文件,里面有这个:

这样,如果用户登录,我可以轻松获取配置文件,因为用户有一个 get_profile() 方法。但是,我想添加 UserProfileB。环顾四周,似乎起点是创建一个超类用作 AUTH_PROFILE_MODULE 并让 UserProfileA 和 UserProfileB 都继承自该超类。问题是,我不认为 get_profile() 方法返回正确的配置文件。它将返回超类的一个实例。我来自 java 背景(多态性),所以我不确定我应该做什么。

谢谢!

编辑:

好吧,我找到了一种方法来通过我在此站点http://djangosnippets.org/snippets/1031/上找到的一种称为“继承黑客”的方法来做到这一点

它工作得非常好,但是,来自自动发生这些事情的java背景,我有点不安,因为有人必须对其进行编码并将其称为“hack”才能在python中完成。python没有启用这个功能有什么原因吗?

0 投票
5 回答
35255 浏览

python - Django - 某些视图的用户权限?

从管理员我看到您可以为用户或用户组分配权限:允许从模型中添加、更改或删除数据。

这很好,但我还需要允许用户或用户组访问或不访问一组视图。我的网站上有某些类型的服务,因此我希望允许某些用户访问某些服务(页面/视图),但不允许其他用户访问。

那么如何允许某些用户/用户组访问某些视图呢?谢谢!

0 投票
1 回答
722 浏览

django - Django中非常独立的数据库中的“外键”

我正在编写一个使用两个不同数据库的 Django 站点。一个是本地的,我们称之为“Django”,它存储来自非常标准的安装的所有标准表——身份验证、站点、评论等——以及一些额外的表。

包括用户在内的大部分数据来自另一台服务器上的数据库,我们称其为“传统”数据库。

我正在寻找有关连接两个数据库的干净、pythonic 方式的建议,特别是关于用户的建议。

我正在使用代理模型,当我可以显式使用它时效果很好,但是当我将用户对象作为相关对象访问时遇到问题(例如,使用内置的 django 评论系统时)。

代码如下所示:

models.py:(指向 Django 数据库)

legacy_models.py:(指向“Legacy”数据库)

我还开发了自己的中间件,request.user代理User对象也是如此。

真正的问题是当我使用将用户作为相关对象的东西时,特别是在我控制较少的模板中。

在模板中:

除了创建使用我的代理用户模型的评论系统的包装版本之外,我还能做些什么吗?

0 投票
2 回答
27601 浏览

django - 使用 django 表单登录页面

我是 python 和 django 的新手...我想知道如何使用 django 表单(forms.py)创建登录表单