FBV(function base views) 就是在視圖裏使用函數處理請求,也是咱們最開始接觸和使用的方式,普通項目中最多見的方式。html
urls.pypython
1
2
3
4
|
urlpatterns
=
[
url(r
'^admin/'
, admin.site.urls),
url(r
'^login/$'
, account.login),
]
|
views.pydjango
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
# 登陸驗證
def
login(request):
message
=
""
if
request.method
=
=
"POST"
:
user
=
request.POST.get(
'username'
)
pwd
=
request.POST.get(
'password'
)
c
=
Administrator.objects.
filter
(username
=
user, password
=
pwd).count()
if
c:
request.session[
'is_login'
]
=
True
request.session[
'username'
]
=
user
return
redirect(
'/index.html'
)
else
:
message
=
"用戶名或密碼錯誤"
return
render(request,
'login.html'
, {
'msg'
: message})
|
說白了,FBV就是在views.py文件中定義函數來處理用戶請求,函數中再定義若是是GET請求怎麼處理,POST請求怎麼處理,等等!服務器
在普通項目中都會用都FBV,對請求數據的操做都會寫在url中,如:127.0.0.1:8000/index/addsession
CBV(class base views) 就是在視圖裏使用類處理請求。框架
urls.py函數
1
2
3
4
|
urlpatterns
=
[
url(r
'^admin/'
, admin.site.urls),
url(r
'^login/$'
, account.Login.as_view()),
]
|
views.pypost
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
from
django
import
views
from
django.utils.decorators
import
method_decorator
class
Login(views.View):
def
get(
self
, request,
*
args,
*
*
kwagrs):
return
render(request,
'login.html'
)
def
post(
self
, request,
*
args,
*
*
kwagrs):
user
=
request.POST.get(
'username'
)
pwd
=
request.POST.get(
'password'
)
c
=
Administrator.objects.
filter
(username
=
user, password
=
pwd).count()
if
c:
request.session[
'is_login'
]
=
True
request.session[
'username'
]
=
user
return
redirect(
'/index.html'
)
else
:
message
=
"用戶名或密碼錯誤"
return
render(request,
'login.html'
, {
'msg'
: message})
|
當咱們使用CBV方式時,首先要注意urls.py文件中要寫成「類名.as_view()」方式映射,其次在類中咱們定義的get/post方法這些方法的名字不是咱們本身定義的,而是按照固定樣式,View類中支持如下方法:url
1
|
http_method_names
=
[
'get'
,
'post'
,
'put'
,
'patch'
,
'delete'
,
'head'
,
'options'
,
'trace'
]
|
當咱們發送GET請求時,類自動將GET請求轉到get方法去處理,其餘請求同理!spa
根據method(請求方式)的不一樣,對請求數據進行不一樣的操做
在Django Rest Framework框架中用到