1.機能分類ビュー
FBV(fucntionベースビュー)
実行要求を機能するかを決定するものCBV(クラスベースビュー)、CBV定義されたメソッド名、
2.FBV変換CBV(なく、かなり右)
当社のカスタムクラスの機能実行方法を派遣元によると、URLのCBVで指定されたクラス名.as_view()メソッドを実行します!
#################### FBV
DEF pressedit(リクエスト、edit_id、test_id): OBJ = models.presslist.objects.get(PK = edit_id) プリント(test_id、edit_id ) MSG = '' もし request.method == ' POST ' : obj.name = request.POST.get(' pressname ' ) もし models.presslist.objects.filter(名= obj.name): MSG = ' 已存在' もし ないobj.name: MSG = ' 不能为空" 場合 ではない models.presslist.objects.filter(名= obj.name)とobj.name: obj.save() 戻りリダイレクト((逆' presslistを' )) を返す(リクエスト、レンダリング' cbsadd-edit.htmlを' { ' OBJ ':OBJ、' MSG ' :MSG}) ####################### CBVの クラスpressedit1(ビュー): デフ(自己、要求を取得し、 edit_id、test_id): OBJ = models.presslist.objects.get(PK = edit_id) MSG = '' プリント(edit_id、test_id) プリント(ID(OBJ)) リターンレンダリング(要求、' cbsadd-edit.html ' { ' OBJ ':OBJ、' MSG ' :MSG}) DEF (自己、要求、edit_id、test_idを投稿): MSG = '' OBJ = models.presslist.objects.get(PK = edit_id) obj.name = request.POST.get(' pressname ' ) プリント(ID(OBJ)) もし models.presslist.objects.filter(名前= obj.name): MSGを = ' 既存の' IF ないobj.name: MSG = ' 空にすることはできません' のIF ない(名= obj.name)models.presslist.objects.filter とobj.name: )(obj.save 返すリダイレクト(リバース(' presslist ' )) を返すレンダリング(要求、' cbsadd-edit.html ' { ' OBJ ':OBJ、' MSG ':MSG})
3.ビュー機能デコレータ
インポート時の インポートfunctools から django.utils.decoratorsはインポートmethod_decoratorの
デフ:wapp(FUNC) @ functools.wraps(FUNC) デフインナー(* argsを、** :kwargsから) TIME1 = time.time() RET、= FUNC(*引数を** kwargsから) 印刷(time.time() - 時刻1) を返すRET を返す内部を
####### FBV
#URL
URL(R '^プレス/編集/(?P <edit_id> \ D +)/(?P <test_id> \ D +)/'、views.pressedit、名前= 'pressedit')、
#views
@wapp
DEF presslist(リクエスト):
msg_all = models.presslist.objects.all()
リターンレンダリング(要求、 'cbs.html' { 'MSG':msg_all})
####### CBV
#URL
URL(R '^プレス/編集/(?P <edit_id> \ D +)/(?P <test_id> \ D +)/'、views.pressedit1.as_view()、名前= 'pressedit')、
#views
@method_decorator(wapp、名前=「取得 」)### の全ての機能の有効な、直接機能をディスパッチ機能することができデコレータや機能を飾るために、このmethod_decorator独自のデコレータで指定され
たクラスpressedit1(ビュー):
DEF GET(セルフリクエスト、edit_id、test_id、MSG = ':')
OBJ = models.presslist.objects.get(PK = edit_id)
'{' cbsadd-edit.html OBJ(レンダリング要求、戻り'':OBJ、 'MSG' :MSG})
DEF POST(セルフ、要求、edit_id、test_id):
MSG = ''
OBJ = models.presslist.objects.get(PK = edit_id)
obj.name = request.POST.get( 'pressname')
モデルIF .presslist.objects.filter(名前= obj.name):
MSG = '既存の'
obj.nameされていない場合:
MSGは= '空にすることはできません'
(名= obj.name)をmodels.presslist.objects.filterとobj.nameない場合:
obj.save()
リターンリダイレクト(逆( 'presslist'))
戻りself.get(リクエスト、edit_id、test_id、MSG)