视图系统 CBV 和FBV
1.FBV : 基于函数的视图。
2.CBV: 基于类的视图。
(1)创建视图类步骤:
① 创建一个类继承 from django.views import View。
②覆写(重写) get() 、post() 方法。
1)当浏览器是get请求的时候,默认调用get() 方法。
2)当浏览器是post请求的时候、默认调用的是post()方法。
3)注意: get()、post() 方法 必须要声明出形参(request)。
③路由中使用方式: views.类名.as_views()
注意: CBV 和FBV 同级的,并且根据个人习惯使用不同方式。
例子:
视图:
FBV function base view 基于函数的视图
from django.shortcuts import render, HttpResponse
def login(request):
error_msg = ''
if request.method == 'POST':
name = request.POST.get('username') # 获取表单提交过来的值
password = request.POST.get('passwd')
print(name, password)
# print(request.POST) 字典
if name == 'zs' and password == '123':
# 输入正确,登录成功,进入success
# return HttpResponse('success!!!')
return redirect('/app01/lishan01/')
else:
# 输入不正确,登录不成功,返回登录界面
error_msg = '用户名或者密码错误,请重新输入'
return render(request, 'app01/login.html', {'error_msg': error_msg})
#CBV class base view 基于类的视图
from django.views import View
class Login2(View):
def get(self,request):
return render(request,'app01/login.html')
def post(self,request):
name = request.POST.get('username')
pwd=request.POST.get('pwd')
print(name,pwd)
return HttpResponse('success...')
路由:
from django.urls import path
from app01 import views
urlpatterns = [
path('login/', views.login),
path('lishan01/', views.lishan01),
path('login2/', views.Login2.as_view()),
]
使用 继承父类View 里面的函数as_view,可以自动判别 get 和 post 方法,并返回到Login2类中相关函数流程