2020-06-29 Day6 CBV和FBV简介和request补充

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请求的请求体

未完待续。。。

你可能感兴趣的:(2020-06-29 Day6 CBV和FBV简介和request补充)