こんにちは、habrauser!
私はすでに
中年の危機に見舞われたかもしれませんが、夏にはメジャーなオープンソースプロジェクトに取り組み始めました。 しかし、それについて少し後で
、コードが恥ずかしくないとき 。 だから、DRY
Do n't Repeat Youselfの概念に合わせて書く必要のあるスニペットをいくつか共有したいと思います。 したがって、私はいくつかの記事を書くつもりです。
ところで、あなたは
私の以前の記事に注意を払うことができます。
AJAXの実装から始めます。
すぐに予約したい-少し前に
、 ajaxフォームを実装するための
例がdzhangi Webサイトで見つかりまし
た 。 判明したように、私はほとんど同じことをしましたが、自分でやったので満足しています=)以下に例を示して分析します。

猫をお願いします。
リリース1.5の
django.views.genericモジュールの外観を考慮して、Jungでのフォームの処理について話すと、FormViewクラスに注意を払うしかありません。 フォームを処理するための他のすべてのジェネリッククラスはそこから継承されるため、実験の対象として選択しました。
それでは、行きましょう:
バックエンド
is_valid(self、form)および
is_invalid(self、form)メソッドは、フォームがそれぞれ
is_valid()の要件を満たしている場合とそうでない場合に、返された結果を処理します。
FormMixinの祖先を
作成すると、次のことがわかります。
def form_valid(self, form): """ If the form is valid, redirect to the supplied URL. """ return HttpResponseRedirect(self.get_success_url()) def form_invalid(self, form): """ If the form is invalid, re-render the context data with the data-filled form and errors. """ return self.render_to_response(self.get_context_data(form=form))
is_valid()メソッドの場合、リダイレクトだけが
煩わしいです。 したがって、このコードを必要な答えに安全に置き換えることができます。
from django.shortcuts import HttpResponse def form_valid(self, form): return HttpResponse('OK')
その結果、
jqueryが予期する出力で
HTTP 200コードを取得し
ます 。
また、
ModelFormMixinクラスを覗いて、応答の前にフォームの保存を追加することもできました。 その結果、次のようなハイブリッドを得ました。
def form_valid(self, form): form.save() return HttpResponse('OK')
フォームエラーの場合の答えはやや複雑です-エラー辞書を返し、ユーザーに表示する必要があります。 ただし、タスクはフォームの標準属性
エラーを使用して簡単に実行できます。
import json from django.http import HttpResponseBadRequest def form_invalid(self, form): errors_dict = json.dumps(dict([(k, [e for e in v]) for k, v in form.errors.items()])) return HttpResponseBadRequest(json.dumps(errors_dict))
AjaxFormMixin
したがって、次のクラスを取得します。
from django.views.generic import FormView class AjaxFormMixin(FormView): template_name = 'form_ajax.html'
これで、他のタイプの
クラスベースビューと同様に、安全に継承できるクラスが
できました 。 呼び出しは次のようになります。
from django.contrib.auth.forms import PasswordChangeForm
CreateFormとして使用できるのは、親
FormMixinクラスの
__init __()メソッドがモデル引数を受け入れないため、この作業を自分で行う必要があるという警告がある
場合のみです。
from django.forms.models import modelform_factory class TaskUserAssign(AjaxFormMixin): form_class = modelform_factory(models.TaskRole)
AjaxUpdateFormMixin
したがって、ajaxフォームを処理するための基本クラスがあります。
django-wayに従って、アップデート用にもう1つの
一般的な 「イメージ内」を作成してみてください。 同じ
django.views.genericモジュール
で 、
UpdateViewクラスとその答えを見つけます。クラスの
オブジェクト属性が必要です...
class AjaxUpdateFormMixin(AjaxFormMixin, UpdateView): def get(self, request, *args, **kwargs): self.object = self.get_object() return super(AjaxFormMixin, self).get(request, *args, **kwargs) def post(self, request, *args, **kwargs): self.object = self.get_object() return super(AjaxFormMixin, self).post(request, *args, **kwargs)
空想なしで、コードをコピーし、既存の
AjaxFormMixinクラスから他のすべてを継承します。 ちなみに、このクラスには
UpdateViewから継承したモデル属性が既にあり、そのルートは
ModelFormMixinに戻り
ます 。
その結果、
法律で禁止されていない無料の継承のために、オブジェクトの作成、変更、および必要に応じて他のアクション(必要に応じて
is_valid()と
/ dev / brainおよび
/ dev / handsをオーバーライド
)をサポートする一連のクラスがあります。
PS。この記事の目的は、私の業績を示すことではなく(ここで何を分析できるか)、プロセス自体を分析することではありませんでした。 少し後に、私のアシスタントがアプリケーションマズルコードを完了すると、フロントエンドコンポーネントコードでも記事を補足します。 それまでの間、ご清聴ありがとうございました。