使用自定义字段扩展User模型(与Django的身份验证应用程序捆绑在一起)的最佳方法是什么?我也可能希望使用该电子邮件作为用户名(用于身份验证).
我希望django通过电子邮件验证用户,而不是通过用户名.一种方法是提供电子邮件值作为用户名值,但我不希望这样.原因是,我有一个网址/profile/<username>/,因此我没有网址/profile/abcd@gmail.com/.
另一个原因是所有电子邮件都是唯一的,但有时会发生用户名.因此我将自动创建用户名为fullName_ID.
我怎样才能让Django通过电子邮件进行身份验证?
这就是我创建用户的方式.
username = `abcd28`
user_email = `abcd@gmail.com`
user = User.objects.create_user(username, user_email, user_pass)
Run Code Online (Sandbox Code Playgroud)
这是我登录的方式.
email = request.POST['email']
password = request.POST['password']
username = User.objects.get(email=email.lower()).username
user = authenticate(username=username, password=password)
login(request, user)
Run Code Online (Sandbox Code Playgroud)
除了首先获取用户名之外,还有其他任何登录信息吗?
我试图更好地理解django管理员,同时,我正在尝试向当前用户管理员添加一个字段.在models.py我做过
User.add_to_class('new_field', models.BooleanField(default=False))
Run Code Online (Sandbox Code Playgroud)
在admin.py中我有以下内容(字段集基本上只是从django/contrib/auth/admin.py复制)
class AdjUserAdmin(UserAdmin):
list_display = UserAdmin.list_display + ('new_field',)
list_filter = UserAdmin.list_filter + ('new_field',)
fieldsets = UserAdmin.fieldsets
fieldsets[1][1]['fields'] = ('first_name','last_name','email','new_field')
Run Code Online (Sandbox Code Playgroud)
问题是,当我这样做时,我得到错误:
AdjUserAdmin.fieldsets[4][1]['fields']' refers to field 'new_field' that is missing from the form.
我看过UserChangeForm,但看起来它已经正确地将User作为模型.我不确定new_field表格中缺少原因.
谢谢
关于这是臭臭的代码
我知道这是一个臭臭的猴子修补方式去做这个,但是子类化给我的问题主要是出于这些原因..如果我能按照上面说明的方式让它工作,我会很开心..也许很臭.
关于推荐的方式
我所知道的创建用户配置文件的推荐方式,只是在特定情况下,我看不到的优点创造一个全新的表,具有附加调用数据库的时候我要的存储是一个额外的一些信息,如is_private某些信息.如果我存储更多信息,那么我同意,建立用户配置文件更可取.
有没有办法LANGUAGE_CODE在单击按钮(发送请求)时动态更改settings.py 中变量的值?
我希望用户为自己的帐户设置自己的"默认语言" .
现在,用户可以使用下拉列表选择他们的首选语言,并且网站被完美翻译,并且由于Django选择了浏览器的语言,用户在重新打开网站后不需要重新选择他们的语言浏览器.
但是当他们从不同的浏览器打开网站时,默认语言又是"英语",因为在settings.py中设置了LANGUAGE_CODE变量en-us.
所以我想要做的是让每个用户都可以选择他们想要的语言作为默认语言.我想通过制作另一个(类似的)下拉菜单并要求用户选择他们想要的语言作为"默认"并按下save按钮来执行此操作,并且在保存时,我想将LANGUAGE_CODE值更改为由用户(即动态更改).但我不知道如何LANGUAGE_CODE动态改变价值.
此外,这种方法还有一个问题.根据Django的文档,即使我能够LANGUAGE_CODE动态更改此变量,也会使网站将所选语言作为所有用户的默认语言,而不仅仅是针对那个更改它的特定用户:
LANGUAGE_CODE:
- 如果未使用区域设置中间件,则会决定向所有用户提供哪种翻译.
我研究了很多,但找不到适合我的解决方案.我对国际化很新.请帮忙.