0
我有'帳戶'視圖,用戶可以在其中更改他的電子郵件,姓名和密碼。要更改他的電子郵件,他必須通過點擊確認鏈接確認他的電子郵件地址。我的視圖代碼看起來很臃腫,我想知道如何改進它並使其更加簡潔。以下是我目前有 -查看電子郵件驗證碼
在模型:
class EmailChangeAuth(models.Model):
auth_key = models.CharField(max_length=42)
user = models.ForeignKey(User)
new_email = models.CharField(max_length=256)
並在視圖:
@login_required
def account(request, changed_email=''):
old_email = User.objects.get(username=request.user.username).email
name_message = password_message = email_message = ''
change_name_form = ChangeNameForm(instance=request.user)
change_password_form = PasswordChangeForm(user=request.user)
change_email_form = ChangeEmailForm(instance=request.user)
if request.method == "POST":
if "change_name" in request.POST:
change_name_form = ChangeNameForm(data=request.POST or None, instance=request.user)
if change_name_form.is_valid():
change_name_form.save()
name_message = 'Your name has been changed.'
if "change_password" in request.POST:
change_password_form = PasswordChangeForm(data=request.POST or None, user = request.user)
if change_password_form.is_valid():
change_password_form.save()
password_message = 'Your password has been changed.'
if "change_email" in request.POST:
change_email_form = ChangeEmailForm(data=request.POST or None, instance=request.user)
if change_email_form.is_valid() and request.POST['email'] != old_email:
auth_key = uuid.uuid4()
email_auth = EmailChangeAuth(auth_key=auth_key, new_email=request.POST['email'], user=request.user)
email_auth.save()
subject = "Please confirm your email address"
link = "http://127.0.0.1:8000" + reverse('change_email') + str(auth_key) +'/'
send_mail(
'Please confirm your email address',
'Please click the following link to confirm your email address: \n \n%s' %(link),
settings.DEFAULT_FROM_EMAIL,
[request.POST['email']]
)
email_message = "Please comfirm your email to complete changes."
return render_to_response('userprofile/account.html',
{
'change_name_form': change_name_form,
'old_email': old_email,
'change_email_form': change_email_form,
'change_password_form': change_password_form,
'changed_email': changed_email,
'password_message': password_message,
'name_message': name_message,
'email_message': email_message,},
context_instance=RequestContext(request))
def change_email(request, auth_key):
try:
email_object = EmailChangeAuth.objects.get(auth_key=auth_key)
user = email_object.user
user.email = email_object.new_email
user.save()
changed_email = "Your email has been changed."
email_object.delete()
return account(request, changed_email=changed_email)
except EmailChangeAuth.DoesNotExist:
return account(request)
凡將是一個良好的開端,以提高這種大規模的視圖代碼?
'old_email = User.objects.get(username = request.user.username).email' ='old_email = request.user.email' :-) – DrTyrsa 2011-06-08 08:18:54
DrTysa,我確實有'old_email = request.user.email '在某一時刻,但在頁面重新加載它不會保持最新的數據庫中的電子郵件條目。如果我輸入了一個電子郵件地址(即使輸入沒有放入數據庫),它也會改變。出於這個原因,我將其改變爲漫長的路線...我相信有更好的方法來實現這一點,但現在使用longform正在爲我工作...... – David542 2011-06-08 08:35:07