0

ユーザー用のメール変更フォームは機能しますが、コードが正しく記述されていないように感じます。以下で行った方法でそれを行った場合、ページが応答を返すようにするために、何千ものelseステートメントが必要になります。これをより効率的に/より良くする方法を教えてもらえますか? これを行う従来の方法がわからない

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))
4

3 に答える 3

2

検証をフォームの clean メソッドに移動することをお勧めします。

#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))

更新:これを行うのは冗長です:

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

ユーザーはu ieと同じになるためuser = u

于 2012-12-06T01:00:51.780 に答える
0

ifビューにロジックのすべてのビットを記述する場合は、ネストされたより複雑なコードを作成します。それらを適切なセクションに分割する必要があります。同様に、すべてのフォーム関連の検証について、次のようなフォームで実行します-

if `email1` is same as `email2`, 
 and if email1 is valid

フォームで確認してください。cleanまたはclean_FieldNameメソッドでそれを確認する必要があります。ここを参照してください:https ://docs.djangoproject.com/en/dev/ref/forms/validation/#cleaning-and-validating-fields-that-depend-on-each-other

認証を申請した別のチェック-ユーザーが認証されているかどうか。この場合、許可されていないユーザーが自分の電子メールを変更できますか?では、なぜコードを実行させる必要があるのでしょうか。できるだけ早くこの状態を確認してから、ユーザーをログインページに送信することをお勧めします。@login_requiredは、ビューのデコレータとしてこの状態をチェックするために使用されます。ここを参照してください:https ://docs.djangoproject.com/en/dev/topics/auth/#the-login-required-decorator

あなたが本当にあなたの見解であなたのユーザー認証をチェックしたいのなら、私は良いアプローチは-だと思います

def email_change(request):
    if not request.user.is_authenticated:
        // Do what you need to say to user or send them to login
        // return HttpResponse object / HttpResponseRedirect

    form = Email_Change_Form(request.POST) 
    if request.method=='POST': 
        if form.is_valid():
            ...
    else:
        ...  // Display form.
于 2012-12-06T01:22:02.450 に答える