Django电子邮件更改表单设置 [英] Django Email Change Form Setup

查看:120
本文介绍了Django电子邮件更改表单设置的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的电子邮件更改表单供用户工作,但我觉得我的代码写不正确。如果我按照下面的方式做到这一点,我需要一千个else语句,以便页面返回一个响应。有人可以告诉我如何使这个效率更高/更好?我不知道常规的方式来做这件事。

My email change form for users works, but I feel like my code is not written correctly. If I did it the way I have done below, I'd need a thousand else statements so that the page would return a response. Can someone tell me how I can make this more efficient/better? I'm not sure of the conventional way to do this

Views.py

def email_change(request):
    form = Email_Change_Form()
    if request.method=='POST':
        form = Email_Change_Form(request.POST)
        if form.is_valid():
            if request.user.is_authenticated:
                if form.cleaned_data['email1']  == form.cleaned_data['email2']:
                    user = request.user
                    u = User.objects.get(username=user)
                    # get the proper user
                    u.email = form.cleaned_data['email1'] 
                    u.save()
                    return HttpResponseRedirect("/accounts/profile/")
    else:
        return render_to_response("email_change.html", {'form':form}, context_instance=RequestContext(request))


推荐答案

我建议移动val表单清理方法:

I would suggest moving the validation to the form clean method:

#form
class EmailChangeForm():
..
..
 def clean(self):
     if self.cleaned_data.get('email1', None) != self.cleaned_data.get('email1', None):
             raise forms.ValidationError('Validation Failed')


@login_required('/login/') //You can check the user is logged in using the decorator
def email_change(request):
    form = Email_Change_Form()
    if request.method=='POST':
        form = Email_Change_Form(request.POST)
        if form.is_valid():
                    user = request.user //Don't know why you want to get the object from database when you already have it
                    user.email = form.cleaned_data['email1'] 
                    user.save()
                    return HttpResponseRedirect("/accounts/profile/")
    else:
        return render_to_response("email_change.html", {'form':form}, context_instance=RequestContext(request))

更新:
这样做是多余的:

Update: Doing this is redundant:

user = request.user
u = User.objects.get(username=user.username)

由于用户将与u一样,即 user = u

Because user is going to be the same as u i.e. user = u

这篇关于Django电子邮件更改表单设置的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆