Login
芋圆社区 > 编程 > Django > FBV 和 CBV

FBV 和 CBV

77
0
2022-12-27
2022-12-27
Hey、小怪兽


前置准备


  • • Django版本:3.2.8,Python版本:3.9
  • • 先用Pycharm创建一个Django项目demo1:
  • • 在demo1下创建一个views.py来写视图方法:
  • • 之后就只需要用到urls.py,views.py,settings.py

FBV


  • • FBV是Function,Base,View的简称,URL是对应方法函数,FBV的写法简单易懂,视图的代码越简洁越好,但是通过多个if判断,并且复用性差
  • • 简单的写法如下,先在demo1的urls.py里写上我们URL对应的视图方法:
  • from django.contrib import admin
    from django.urls import path
    from demo1.views import fbv_view
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('fbv', fbv_view),
    ]
  • • 在刚才创建的views.py文件里写fbv_view,需要用if来判断请求是GET还是POST:
  • from django.shortcuts import render, HttpResponse
    
    def fbv_view(request):
        if request.method == "GET":
            return HttpResponse('FBV GET...')
        else:
            return HttpResponse('FBV POST...')
  • • 写完后运行项目就可以了,点右上角的绿色三角形启动或者在终端打python manage.py runserver
  • • 需要用到Postman,因为需要发POST请求,先发GET的试试:
  • • GET请求正常,发送POST的话会显示403:
  • • 主要Django带了CSRF验证,用最简单的方法就是在settings.py注释掉这个验证(正常项目不要这么做):
  • MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        # 注释掉这个东西  ↓ ↓ ↓
        # 'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
  • • 因为改了settings.py的文件,需要重启一下,再运行后就正常了:

CBV


  • • CBV,Class,Base,View的简写,URL对应的是类,我们不需要用if来判断请求的方式,继承的View类会自动归到相应的请求方法里,可以用不同的函数针对不同的HTTP方法处理,并且CBV的方式提高了代码的复用性,面向对象编程
  • • 再回到urls.py,修改成CBV的写法,这里就有和FBV最大的区别了,需要用as_view(),这是一个基于类的外部接口,可以帮忙返回视图函数,来根据不同的请求处理不同的方法:
  • from django.contrib import admin
    from django.urls import path
    from demo1.views import CbvView
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('cbv', CbvView.as_view())
    ]
  • • views.py要注意,第一需要从django.views里导入View视图继承,第二是里面的get,post,put这些请求类型不能乱写名字,这是View类里定义的:
  • from django.shortcuts import render, HttpResponse
    from django.views import View
    
    class CbvView(View):
        def get(self, request):
            return HttpResponse('CBV GET...')
    
        def post(self, request):
            return HttpResponse('CBV POST...')
    
        def put(self, request):
            return HttpResponse('CBV PUT...')
  • • 接着继续用Postman发请求就可以了,注意URL地址是cbv了,下面就截图一个PUT请求:

完整代码


  • • urls.py:
  • from django.contrib import admin
    from django.urls import path
    from demo1.views import fbv_view, CbvView
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('fbv', fbv_view),
        path('cbv', CbvView.as_view())
    ]
  • • views.py:
  • from django.shortcuts import render, HttpResponse
    from django.views import View
    
    def fbv_view(request):
        if request.method == "GET":
            return HttpResponse('FBV GET...')
        else:
            return HttpResponse('FBV POST...')
    
    class CbvView(View):
        def get(self, request):
            return HttpResponse('CBV GET...')
    
        def post(self, request):
            return HttpResponse('CBV POST...')
    
        def put(self, request):
            return HttpResponse('CBV PUT...')
  • • settings.py(注释CSRF验证,只是演示POST请求用):
  • # 上面的代码不动
    
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        # 注释掉这个东西  ↓ ↓ ↓
        # 'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    
    # 下面的代码不动

上一篇:美化后台管理Admin

下一篇:SimpleUI后台导航栏报错

Comment

Message Board

编程导航

Django使用Less

美化后台管理Admin

FBV 和 CBV

SimpleUI后台导航栏报错

Django多条件查询

标签属性使用变量引发的BUG

auto_now=True引发的问题

图片上传后大小问题

Django版本查看和升级

values和values_list

过滤器linebreaksbr

拆分views文件

AutoField报错

order_by多条件和随机排序

Django变量名的坑

Copyright © 2020 芋圆社区

Powered by 浙ICP备2020039309号-1

此页面不支持夜间模式!

已进入夜间模式!

已进入普通模式!

搜索框不允许为空

签到成功!经验+5!芋圆币+2!

签到失败!今日已签到!

需要登录社区账号才可以进入!

复制成功
寄,页面未加载完成或页面无锚点