详解django中视图函数的FBV和CBV
作者:suncolor 发布时间:2022-05-26 01:11:10
标签:django,视图函数,FBV,CBV
1.什么是FBV和CBV
FBV是指视图函数以普通函数的形式;CBV是指视图函数以类的方式。
2.普通FBV形式
def index(request):
return HttpResponse('index')
3.CBV形式
3.1 CBV形式的路由
path(r'^login/',views.MyLogin.as_view())
3.2 CBV形式的视图函数
from django.views import View
class MyLogin(View):
def get(self,request): #get请求时执行的函数
return render(request,'form.html')
def post(self,request): #post请求时执行的函数
return HttpResponse('post方法')
FBV和CBV各有千秋
CBV特点是:
能够直接根据请求方式的不同直接匹配到对应的方法执行
4.CBV源码分析
核心在于路由层的views.MyLogin.as_view()--->其实调用了as_view()函数就等于调用了CBV里面的view()函数,因为as_view()函数是一个闭包函数,返回的是view---->view函数里面返回了dispatch函数--->dispatch函数会根据请求的方式调用对应的函数!
5.CBV添加装饰器的三种方式
from django.views import View #CBV需要引入的模块
from django.utils.decorators import method_decorator #加装饰器需要引入的模块
"""
CBV中django不建议你直接给类的方法加装饰器
无论该装饰器是否能都正常工作 都不建议直接加
"""
django给CBV提供了三种方法加装饰器
# @method_decorator(login_auth,name='get') # 方式2(可以添加多个针对不同的方法加不同的装饰器)
# @method_decorator(login_auth,name='post')
class MyLogin(View):
@method_decorator(login_auth) # 方式3:它会直接作用于当前类里面的所有的方法
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request,*args,**kwargs)
# @method_decorator(login_auth) # 方式1:指名道姓,直接在方法上加login_auth为装饰器名称
def get(self,request):
return HttpResponse("get请求")
def post(self,request):
return HttpResponse('post请求')
来源:https://www.cnblogs.com/suncolor/archive/2022/08/15/16587022.html
0
投稿
猜你喜欢
- 本文实例为大家分享了Python Pygame实现俄罗斯方块的具体代码,供大家参考,具体内容如下源码:# coding : utf-8#:
- easy_install 和 pip的介绍:easy_install和pip都是用来下载安装Python一个公共资源库PyPI 的相关资源包
- <script>alert(escape("人"));alert(encodeURI("人&quo
- Python获取电脑截图有多种方式,具体如下:PIL中的ImageGrab模块windows APIPyQtpyautoguiPIL中的Im
- sql="select * from admin where users='"&users&&q
- <?php $url="http://www.golden-book.com/booksinfo/12/264.html&q
- 一.docx模块Python可以利用python-docx模块处理word文档,处理方式是面向对象的。也就是说python-docx模块会把
- 例如:将日期格式为2009-6-8的转换为2009-06-08,给小于10的数字补上一个0方法一:year(now)
- 在本教程中,我们将学习如何创建一个使用Django作为后端的天气应用程序。Django提供了一个基于Python Web框架的Web框架,允
- 1. 查看数据库的版本select @@version2.查看数据库所在机器操作系统参数exec master..xp_msver3. 查看
- 1. Python字典的clear()方法(删除字典内所有元素)#!/usr/bin/python# -*- coding: UTF-8 -
- ansible 简介ansible 是什么?ansible是新出现的自动化运维工具,基于Python开发,集合了众多运维工具(puppet、
- 在了解装饰器的之前一定要先了解函数作为参数传递, 什么是函数内嵌,请参考我之前写的博客函数简介因为在python里面,函数也是对象,也可以作
- 目录前置知识可迭代对象如何判断一个对象是否是可迭代对象?enumerate 函数多嵌套列表总结前置知识如果给定一个 list 或 tuple
- 目录项目地址:1) 启动方法2) web查看方法3) 功能说明:4) 展示:代码项目地址:https://github.com/guodon
- 示例from optparse import OptionParser[...]def main():
- python里的super().init()有什么用?对于python里的super().__init__()有什么作用,很多同学没有弄清楚
- 本文实例讲述了php解析字符串里所有URL地址的方法。分享给大家供大家参考。具体如下:<?php// $html = the html
- 知识点: Array方法: sort:降序 reverse:反序 效果: 代码: <style> *{ margin
- 本文实例讲述了php+Memcached实现简单留言板功能。分享给大家供大家参考,具体如下:MyPdo.php<?phpclass M