私はそれを動作させました。私は、登録のビューメソッドとデフォルトの登録バックエンドを直接変更する必要はないと感じています。私は自分のコードでこれらの変更を行いたいと思っていますが、変更を加えるためにまだ取り組んでいますが、これは実際には機能します。
は、ここで私はそれをやった方法は次のとおりです。
最後にUserオブジェクトを返す、ユーザ名としてhexdigestを格納し、その後、電子メールアドレスに基づいて、SHA1ハッシュを生成し、カスタム登録バックエンドと呼ばれるRegBackendを作成しました。私はステップで作成した新しいRegBackendにurls.pyで
地図レジスタ1
フォームが検証されるように、ランダムなユーザ名を作成するように変更ジャンゴ登録のビューregisterメソッドが、私は持続したことがありませんランダムなユーザー名。私はrequest.POST辞書をコピーし、このランダムなユーザ名をdata ['username']と呼ばれるコピーの辞書キーに設定しました。次に、form_classのインスタンスを作成するときにdata変数を使用します。テンプレートからユーザー名を削除したため、フォーム上でis_valid()を呼び出すとfalseが返されますが、Djangoにはユーザー名が必要ですので、何かを入力する必要がありました。 sha1ハッシュは40奇妙なことに、カスタム登録バックエンドは文句を言わなかったし、保存することができている間Djangoのユーザ名は長さだけで30文字にすることができますので、私は、ランダムなユーザ名のSHA1ハッシュを使用していませんでした
sha1ハッシュですが、フォームは送信されたときの長さのためにエラーを生成します。
_ _です。PY(I既存のDefaultBackendをコピーして、SHA1部分で修飾された)
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
import hashlib
class RegBackend(object):
def register(self, request, **kwargs):
hash_user = hashlib.sha1()
hash_user.update(kwargs['email'])
username, email, password = hash_user.hexdigest(), kwargs['email'], kwargs['password1']
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
#omitted other code from DefaultBackend that I didn't modify
urls.py
url(r'^register/$', register, {'backend': 'registration.backends.default.RegBackend', 'form_class': UserRegistrationForm}, name='registration_register'),
登録/ views.py
def register(request, backend, success_url=None, form_class=None,
disallowed_url='registration_disallowed',
template_name='registration/registration_form.html',
extra_context=None):
backend = get_backend(backend)
if not backend.registration_allowed(request):
return redirect(disallowed_url)
if form_class is None:
form_class = backend.get_form_class(request)
if request.method == 'POST':
# I added the next two lines
data = request.POST.copy()
data['username'] = ''.join([choice(letters) for i in xrange(30)])
form = form_class(data=data, files=request.FILES)
if form.is_valid():
new_user = backend.register(request, **form.cleaned_data)
if success_url is None:
to, args, kwargs = backend.post_registration_redirect(request, new_user)
return redirect(to, *args, **kwargs)
else:
return redirect(success_url)
else:
form = form_class()
if extra_context is None:
extra_context = {}
context = RequestContext(request)
for key, value in extra_context.items():
context[key] = callable(value) and value() or value
return render_to_response(template_name,
{'form': form},
context_instance=context)
ユーザー名を作成しますあなたはビューでフォームの検証を行っていますか? –
私はビューを書いていないので、私はdjango登録ビューを変更する必要があります。私はどのようにユーザー名を設定するだろう。私は電子メールのハッシュを生成することはできますが、ハッシュを使って何をするのかはわかりません。 – Raj
1つの可能な方法は、Django登録で何もしないで、テンプレートのユーザー名フィールドを隠すだけです。ユーザーがフォームを呼び出す前にjavascript関数を送信してユーザー名を生成し、ポストに値を設定すると、電子メールの左側の部分を取って変更することです。 –