2

Djangoでは、フォームを処理する標準的な方法は次のとおりです。

if request.method == 'POST':
    form = SomeForm(request.POST)
    if form.is_valid():
        use the form data

POSTがないか、フォームが無効であるかに関係なく、同じコードを実行したいのですが、これは数行のコードなので、2つの重複するelseブロック(1つは内部用)よりも優れた方法があるのではないかと思います。アウター用の場合と1つ)?

4

3 に答える 3

6

別の関数を使用します。

if request.method != 'POST':
    return do_something_function_for_invalid(request)

form = SomeForm(request.POST)
if not form.is_valid():
    return do_something_function_for_invalid(request)

# do something

次に、次のように定義do_something_function_for_invalid()します。

def do_something_function_for_invalid(request):
    # do something

    return response

または、例外処理を使用します。

try:
    if request.method != 'POST':
        raise ValueError('invalid form')

    form = SomeForm(request.POST)
    if not form.is_valid():
        raise ValueError('not a POST request')

     # do something
except ValueError as ve:
    # handle ve exception, ve.args[0] is the error message
于 2013-01-27T23:32:13.797 に答える
5

別の関数を必要とせず、条件を繰り返さない非常に簡潔な方法:

form = SomeForm(request.POST) if request.method == 'POST' else None

if form and form.is_valid():
    # do your valid-submission stuff
else:
    # do your invalid-submission stuff
于 2013-01-27T23:36:50.210 に答える
0

単純な

if (request.method != 'POST') or (not SomeForm(request.POST).is_valid()):
   do something
于 2013-01-27T23:31:43.773 に答える