django中的FBV和CBV
django中请求处理方式有2种:FBV 和 CBV
一、FBV
FBV(function base views) 就是在视图里使用函数处理请求。
看代码:
urls.py
1
2
3
4
5
6
7
8
|
from django.conf.urls import url, include # from django.contrib import admin from mytest import views urlpatterns = [ # url(r‘^admin/‘, admin.site.urls), url(r‘^index / ‘, views.index), ] |
views.py
1
2
3
4
5
6
7
8
9
|
from django.shortcuts import render def index(req): if req.method = = ‘POST‘: print (‘method is :‘ + req.method) elif req.method = = ‘GET‘: print (‘method is :‘ + req.method) return render(req, ‘index.html‘) |
注意此处定义的是函数【def index(req):】
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
|
<!DOCTYPE html> <html lang = "en" > <head> <meta charset = "UTF-8" > <title>index< / title> < / head> <body> <form action = " " method=" post"> < input type = "text" name = "A" / > < input type = "submit" name = "b" value = "提交" / > < / form> < / body> < / html> |
上面就是FBV的使用。
二、CBV
CBV(class base views) 就是在视图里使用类处理请求。
将上述代码中的urls.py 修改为如下:
1
2
3
4
5
6
|
from mytest import views urlpatterns = [ # url(r‘^index/‘, views.index), url(r‘^index / ‘, views.Index.as_view()), ] |
注:url(r‘^index/‘, views.Index.as_view()), 是固定用法。
将上述代码中的views.py 修改为如下:
1
2
3
4
5
6
7
8
9
10
11
|
from django.views import View class Index(View): def get( self , req): print (‘method is :‘ + req.method) return render(req, ‘index.html‘) def post( self , req): print (‘method is :‘ + req.method) return render(req, ‘index.html‘) |
注:类要继承 View ,类中函数名必须小写。
两种方式没有优劣,都可以使用。