Django-Registration:ユーザー名として電子メール
-
28-10-2019 - |
質問
認証を使用してユーザー名の代わりに電子メールを使用するにはどうすればよいですか Django-Registration.
さらに、登録モジュールをすでにインストールしたら、この変更を実施するにはどうすればよいですか。
ここでソリューションを編集しますか django-registrationをユーザー名として使用するための良いハックを知っている人はいますか? libフォルダーで?
解決
親愛なる仲間のDjango Coder、
これがそれを行うための最良の方法だと思います。幸運を!
最初のステップは、使用したいフォームを作成することです.
プロジェクト/アカウント/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でレジスタ()関数をオーバーライドするファイルを作成しています。
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
使用するパスにURLを指示します。
Project/urls.py
(r'^accounts/', include('registration.backends.default.urls')),
登録ビューにカスタムバックエンドを使用するようにURLに伝えます。また、作成したフォームをインポートし、ビューによって処理するためにURLに追加します。
プロジェクト/アカウント/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> = 1.3と<1.5の場合 ユーザー名としてのdjango電子メール githubで。
最近、登録を使用していますが、簡単に切り替えます Django-Registration-Email. 。 Django 1.4で正常に動作し、同じテンプレートを再利用して単純に追加します REGISTRATION_EMAIL_ACTIVATE_SUCCESS_URL = "/profiles/create/"
にリダイレクトします プロフィール 作成ページ。
django1.5カスタムユーザーモデルを通じてこの問題を克服する ユーザー名として使用されるフィールドを指定できます. 。 Django 1.5ドキュメントで述べたように:
一意の識別子として使用されるユーザーモデルのフィールドの名前を記述する文字列。これは通常、ある種のユーザー名ですが、電子メールアドレス、またはその他の一意の識別子でもあります。
最も簡単な方法は、を隠すことです ユーザー名 のフィールド 登録用紙 CSSを使用したテンプレート 表示:なし 財産。から値を取るスクリプトを追加します Eメール フィールドを形成し、隠された値を設定します ユーザー名 分野。そのため、フォームを送信している間、ユーザーは電子メールをユーザー名として知らずに送信します。唯一の問題は、デフォルトではユーザー名フィールドが30文字より長い電子メールを受け入れることができないためです。したがって、安全な賭けのために、データベースでユーザー名の長さを手動で増やす必要があります。
これが新しい登録_form.htmlテンプレートです:
<form method="post" action="" class="wide">
{% csrf_token %}
<dl>
<div style="display:none">
<dt>
<label for="id_username">Username:</label>
{% if form.username.errors %}
<span class="error">{{ form.username.errors.as_text }}</span>
{% endif %}
</dt>
<dd>{{ form.username }}</dd>
</div>
<dt>
<label for="id_email">Email address:</label>
{% if form.email.errors %}
<span class="error">{{ form.email.errors.as_text }}</span>
{% endif %}
</dt>
<dd>{{ form.email }}</dd>
<br>
<dt>
<label for="id_password1">Password:</label>
{% if form.password1.errors %}
<span class="error">{{ form.password1.errors.as_text }}</span>
{% endif %}
</dt>
<dd>{{ form.password1 }}</dd>
<br>
<dt>
<label for="id_password2">Password (type again to catch typos):</label>
{% if form.password2.errors %}
<span class="error">{{ form.password2.errors.as_text }}</span>
{% endif %}
</dt>
<dd>{{ form.password2 }}</dd>
<br>
<dt><input type="submit" value="Sign up" /></dt>
</dl>
</form>
隠しフォームフィールドに値を設定する単純なjQuery srcipt ユーザー名 は:
$(document).ready(function()
{
$('#id_email').blur(function(e)
{
var email_address = $('#id_email').val();
$('#id_username').val(email_address);
});
});
ID id_email と id_username Django-Registrationフォームによって自動的に設定されます。