gpt4 book ai didi

Django-Registration: 电子邮件作为用户名

转载 作者:行者123 更新时间:2023-11-28 19:36:12 25 4
gpt4 key购买 nike

如何使用电子邮件而不是用户名进行身份验证 django-registration .

进一步了解如何在安装注册模块后实现此更改。

我要在这里编辑解决方案吗 Anyone knows a good hack to make django-registration use emails as usernames?在 lib 文件夹中?

最佳答案

亲爱的 Django 编码员,

我认为这是最好的方法。祝你好运!

第一步是创建您要使用的表单

project/accounts/forms.py

from django import forms
from registration.forms import RegistrationForm
from django.contrib.auth.models import User

class Email(forms.EmailField):
def clean(self, value):
super(Email, self).clean(value)
try:
User.objects.get(email=value)
raise forms.ValidationError("This email is already registered. Use the 'forgot password' link on the login page")
except User.DoesNotExist:
return value


class UserRegistrationForm(forms.Form):
password1 = forms.CharField(widget=forms.PasswordInput(), label="Password")
password2 = forms.CharField(widget=forms.PasswordInput(), label="Repeat your password")
#email will be become username
email = Email()

def clean_password(self):
if self.data['password1'] != self.data['password2']:
raise forms.ValidationError('Passwords are not the same')
return self.data['password1']

在这里您要创建一个文件来覆盖 django-registration 中的 register() 函数。

project/accounts/regbackend.py

from django.conf import settings
from django.contrib.sites.models import RequestSite
from django.contrib.sites.models import Site

from registration import signals
from registration.forms import RegistrationForm
from registration.models import RegistrationProfile

from registration.backends import default


class Backend(default.DefaultBackend):
def register(self, request, **kwargs):
email, password = kwargs['email'], kwargs['password1']
username = email
if Site._meta.installed:
site = Site.objects.get_current()
else:
site = RequestSite(request)
new_user = RegistrationProfile.objects.create_inactive_user(username, email,
password, site)
signals.user_registered.send(sender=self.__class__,
user=new_user,
request=request)
return new_user

将您的网址指向您要使用的路径。

project/urls.py

(r'^accounts/', include('registration.backends.default.urls')),

告诉您的网址使用注册 View 的自定义后端。此外,导入您创建的表单并将其添加到要由 View 处理的 url。

project/accounts/urls.py

from django.conf.urls.defaults import *
from registration.backends.default.urls import *
from accounts.forms import UserRegistrationForm

urlpatterns += patterns('',

#customize user registration form
url(r'^register/$', 'registration.views.register',
{
'backend': 'accounts.regbackend.Backend',
'form_class' : UserRegistrationForm
},
name='registration_register'
),

)

希望有用!

-马特

关于Django-Registration: 电子邮件作为用户名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6364623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com