django3-ビュー機能拡張

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)

 

おすすめ

転載: www.cnblogs.com/quguanwen/p/11391327.html
おすすめ