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框架中用到