FBV和CBV简介
- FBV 基于函数的视图(funtion base view)
根据不同的url请求执行对应的函数 - CBV 基于类的视图(class base view)
根据不同的url请求执行不同的类方法,通过反射的方式找到对应的函数
下面是以文件上传为例的对应代码
urls
from django.urls import path
from app01 import views
urlpatterns = [
path('upload/', views.Uploadfile), #FBV的url
path('upload1/', views.Uploadfile1.as_view()) #CBV的url
]
views
from django.shortcuts import render, HttpResponse
from django.views import View #CBV必须引入的模块
# Create your views here.
#FBV的形式实现
def Uploadfile(request):
met = request.method
if met == 'GET':
return render(request, 'upload.html')
elif met == 'POST':
print(request.path_info)
print(request.body)
print(request.FILES.get('filename', None))
return HttpResponse('上传成功')
#CBV的形式实现
class Uploadfile1(View):
def get(self, request):
return render(request, 'upload1.html')
def post(self, request):
print(request.path_info)
print(request.body)
print(request.FILES.get('filename', None))
return HttpResponse('上传成功')
两者没有好坏之分,哪个合适用那个。
request的补充
- request.method --> 获取请求的方法
用例
met = request.method
if met == 'GET':
pass
elif met == 'POST':
pass
- request.GET --> 获取GET请求的参数
用例 假如请求的url是 http://127.0.0.1:8000/user/?id=1
request.GET.get('id', None)
- request.POST --> 获取POST提交的数据
用例
request.GPOSTET.get('name', None)
- request.path_info -->请求url的相对路径,port以后的部分。
用例 假如请求的url是 http://127.0.0.1:8000/app01/upload/
print(request.path_info)
输出打印结果为:/app01/upload/
- request.body -->获取url请求的请求体
未完待续。。。