Django的CBV和FBV

1. Django支持两种对应关系,CBV和FBV

FBV:function base view &CBV:class base view
  url.py
   index---函数名
  views.py
   def 函数(request):

/index/ -> 函数名
 /index/ ->类,请求来了以后,会执行类里面的指定的方法。

2.CBV提交----- class Home(view) Home类必须继承view.

2.1 urls.py中写对应关系

2.2 views.py中写函数

2.3 home.html中写模板

3. 过程

服务器端先运行起来; 客户端发来请求,先去匹配URL,找到类。再进行二次匹配,匹配请求的方法(get/put)。

是基于反射(getattr, hasattr, deleteattr)来进行匹配的,进而知道应该执行哪个类。

父类的dispatch 是先执行的,后面的get/post 都是通过dispatch反射进而找到的。

找到执行完以后,也是把结果先返回给dispatch,然后再返回给客户端。

4. 自己可以修改父类的dispatch方法,进而增加一些新的功能。

运行以后,后台结果如下:

5.本节笔记

FBV:function base view &CBV:class base view
		url.py
			index---函数名
		views.py
			def 函数(request):
		/index/ -> 函数名
		/index/ ->类,请求来了以后,会执行类里面的指定的方法。

		建议:两者都用

6.至此

urls.py程序:

from django.conf.urls import url
from django.contrib import admin
from app01 import views

urlpatterns = [
    url(r‘^admin/‘, admin.site.urls),
    url(r‘^index/‘, views.index),
    url(r‘^login/‘, views.login),
    url(r‘^home/‘, views.Home.as_view()),
]

views.py程序

from django.shortcuts import render,HttpResponse,redirect

# Create your views here.
def index(request):
    return HttpResponse(‘index‘)
def login(request):
    if request.method==‘GET‘:
        return render(request,‘login.html‘)
    elif request.method==‘POST‘:
        #radio
        #v1=request.POST.get(‘gender‘)
        #print(v1)
        #checkbox
        #v2=request.POST.getlist(‘favor‘)
        #print(v2)
        #v3=request.POST.get(‘fafafa‘)
       #print(v3)
        obj=request.FILES.get(‘fafafa‘)
        print(obj,type(obj),obj.name)
        import os
        file_path=os.path.join(‘upload‘,obj.name)
        f=open(file_path, mode="wb")
        for i in obj.chunks():
            f.write(i)
        f.close()

        return render(request,‘login.html‘)
    else:
        # put,delete,head,option.....
        return redirect(‘/index/‘)

from django.views import View
class Home(View):
    def dispatch(self,request,*args,**kwargs):
        #调用父类中的dispatch
        print(‘before‘)
        result=super(Home,self).dispatch(request,*args,**kwargs)
        print(‘after‘)
        return result

    def get(self,request):
        print(request.method)
        return render(request,‘home.html‘)
    def post(self,request):
        print(request.method)
        return render(request,‘home.html‘)

"""def login(request):
    if request.method==‘GET‘:
        return render(request,‘login.html‘)
    elif request.method==‘POST‘:
        u = request.POST.get(‘user‘)
        p = request.POST.get(‘pwd‘)
        if u==‘root‘ and p==‘123‘:
            return redirect(‘/index/‘)
        else:
            return render(request,‘login.html‘)
    else:
        # put,delete,head,option.....
        return redirect(‘/index/‘)
"""

home.html程序

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="/home/" method="POST">
        <input type="text" name="user"/>
        <input type="submit"/>
    </form>
</body>
</html>
时间: 2024-10-27 13:20:58

Django的CBV和FBV的相关文章

django补充CBV和FBV模式

django补充CBV和FBV模式FBV模式---函数:经常用的方式CBV模式---类CBV中url连接时函数名后面要接.as_view()class index(views.View): @... def dispath(self,request,*arg,**kwarg): super...如果对某一种请求做处理:单一装饰器如果对请求做处理:dispatch单一装饰器注:CBV模式中的装饰器要调用method_decoratorfrom django.utils.decorators imp

Django的 CBV和FBV

FBV CBV 回顾多重继承和Mixin 回到顶部 FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述. 回到顶部 CBV CBV(class base views) 就是在视图里使用类处理请求. Python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承.封装.多态).所以Django在后来加入了Class-Based-View.可以让我们用类写View.

Django的CBV与FBV

知识预览 FBV CBV FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述. CBV CBV(class base views) 就是在视图里使用类处理请求. Python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承.封装.多态).所以Django在后来加入了Class-Based-View.可以让我们用类写View.这样做的优点主要下面两种: 提高了代

Django中的CBV和FBV

Django中的CBV和FBV 一.  CBV CBV是采用面向对象的方法写视图文件. CBV的执行流程: 浏览器向服务器端发送请求,服务器端的urls.py根据请求匹配url,找到要执行的视图类,执行dispatch方法区分出是POST请求还是GET请求,执行views.py对应类中的POST方法或GET方法. 使用实例: urls.py path('login/',views.Login.as_view()) views.py from django import views #在views

Django——CBV与FBV

一.FBV FBV(function base views) 就是在视图里使用函数处理请求. 二.CBV CBV(class base views) 就是在视图里使用类处理请求. Python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承.封装.多态).所以Django在后来加入了Class-Based-View.可以让我们用类写View.这样做的优点主要下面两种: 提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承) 可以用不同的函数针对不同的

Django中CBV和Restful API中的APIView源码分析

Django中CBV和Restful API中的APIView源码分析 python的Django框架的视图处理可以用FBV, 也可以采用CBV.首先定义一个CBV视图: from django.views import Viewfrom django.http import JsonResponseclass Book(View):    def get(self, request):        ll = [{'key':value}]        return JsonResponse

django中CBV源码分析

前言:Django的视图处理方式有两种: FBV(function base views) 是在视图里基于函数形式处理请求. CBV(class base views)是在视图里基于类的形式处理请求. Python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承.封装.多态).所以Django在后来加入了Class-Based-View.可以让我们用类写View.这样做的优点主要下面两种: 提高了代码的复用性,可以使用面向对象的技术,比如Mixin(多继承) 可以

Django 的 cbv

Django 的 cbv 正如我们了解到的,Django 写视图函数有两种写法:cbv 和 fbv.cbv 提倡使用类来写,fbv 使用函数来 写.当然为了代码的重复行,官方更推荐使用 cbv. 写 cbv 时,写好 class 类视图,然后在 url 中调用 class 的 as_view() 函数,以前一直以为只要会调 用即可,没有去理解内涵.当然 fbv 直接执行函数即可.今天来看一看 cbv 方式的源码. 在 PyCharm 中进入 as_view 的源码,发现其是一个 classmet

Django - CBV、FBV

一.FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式. 二.CBV CBV(class base views) 就是在视图里使用类处理请求. Python是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承.封装.多态).所以Django在后来加入了Class-Based-View.可以让我们用类写View.这样做的优点主要下面两种: 提高了代码的复用性,可以使用面向对象的技