问题标签 [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.
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
django - Django 内置登录视图和错误
我正在使用django.contrib.auth.views.login and
.logout
视图。非常方便,开箱即用,将再次部署 AAA+ 等。
出现问题是因为我没有使用单独的登录页面,而是在每个页面中都有一个登录框(当然,除非用户已登录)。因此,当用户名/密码组合错误时,我会收到错误消息。我应该选择这三个路径中的哪一个?
- 有一种秘密方法可以重定向到下一个,不仅在成功时,而且在错误时。如果是这样,请告诉我!
- 我编写了自己的登录视图,同时使用了 Django 的消息系统
- 我编写了一个登录页面(嗯,它只是缺少一个模板),所以我可以充分利用 Django 身份验证系统的强大功能。
django-admin - django app同时创建auth.user和app user,并将auth.user_id存储在app.user中
我有一个通过 auth.user 和应用程序将用户添加到系统的应用程序。保存时,我想创建用户,然后获取 auth.user.id 并将其添加到 team_user.id。
我一直在尝试下面的代码,却一无所获。关于我做错了什么的任何建议?请指教。
django - Django:使用 first_name.last_name 创建一个干净的用户名
username
我的网站最好使用first_name.last_name形式的规范化用户名,而不是花哨。
使用这种用户名创建新用户很简单
但是清理这两个字段以使其包含的最佳方法是:
- 没有空格 ex: Théodore de Banville
- 没有口音前:Raphaël LeBlond
- 任何其他有问题的字符
我想过使用re
and unidecode
:
但这足够了吗?
编辑:这是我目前的解决方案:
django - Django 表单总是失败
我正在尝试使用 Django 的内置身份验证模块。对于我正在开发的网站,我想使用电子邮件地址作为登录名,而不仅仅是它们通常设置的普通字母数字字段。为了做到这一点,我将所有字符串字段更改为电子邮件字段,并将它们的最大长度从 30 更改为 320。我的注册码似乎工作正常,但我的登录码却没有。这是我现在正在使用的:
无论我提交什么, form.is_valid() 都返回 FALSE 但 form.errors 为空。有什么想法可能是错的吗?我想我将所有内容都更改为电子邮件属性,所以我不认为就是这样。此外,如果它改变了我试图在谷歌应用引擎上使用djangoappengine执行此操作的任何内容。
django - 渲染时 NoReverseMatch:“django.contrib.auth.views.login”的反向
我正在使用 Django 的身份验证,并且在 login.html 模板中,以下语句正在生成错误:
/login 处的 TemplateSyntaxError
渲染时捕获 NoReverseMatch:“django.contrib.auth.views.login”的反向参数“()”和关键字参数“{}”未找到。
这个 url 在我的 urls.py 中定义:
我已经安装了认证系统:
有任何想法吗?
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没有启用这个功能有什么原因吗?
python - Django - 某些视图的用户权限?
从管理员我看到您可以为用户或用户组分配权限:允许从模型中添加、更改或删除数据。
这很好,但我还需要允许用户或用户组访问或不访问一组视图。我的网站上有某些类型的服务,因此我希望允许某些用户访问某些服务(页面/视图),但不允许其他用户访问。
那么如何允许某些用户/用户组访问某些视图呢?谢谢!
django - Django中非常独立的数据库中的“外键”
我正在编写一个使用两个不同数据库的 Django 站点。一个是本地的,我们称之为“Django”,它存储来自非常标准的安装的所有标准表——身份验证、站点、评论等——以及一些额外的表。
包括用户在内的大部分数据来自另一台服务器上的数据库,我们称其为“传统”数据库。
我正在寻找有关连接两个数据库的干净、pythonic 方式的建议,特别是关于用户的建议。
我正在使用代理模型,当我可以显式使用它时效果很好,但是当我将用户对象作为相关对象访问时遇到问题(例如,使用内置的 django 评论系统时)。
代码如下所示:
models.py:(指向 Django 数据库)
legacy_models.py:(指向“Legacy”数据库)
我还开发了自己的中间件,request.user
代理User
对象也是如此。
真正的问题是当我使用将用户作为相关对象的东西时,特别是在我控制较少的模板中。
在模板中:
除了创建使用我的代理用户模型的评论系统的包装版本之外,我还能做些什么吗?
django - 使用 django 表单登录页面
我是 python 和 django 的新手...我想知道如何使用 django 表单(forms.py)创建登录表单