title: python djano CBV FBV

tags: python, djano, CBV, FBV

grammar_cjkRuby: true

python django的function的定义方法

在处理URL的调用方法的function里面,可能会这样定义

Fuction Based View

在视图中用函数来处理请求

def get():
if method == "GET":
XXX def post():
if method == "POST":
XXX

classes Based view

在视图中用类来处理

必须要引入django的view类

在CBV的方式下,请求的步骤是

  1. 请求先被发给dispatch方法
  2. 如果子类中没有实现dispatch方法,则去找父类的这个方法
  3. 该方法中通过获取request.method的请求方式,通过反射的方式实现各种请求的处理

我们可以看看父类的dispatch方法的实现

   if request.method.lower() in self.http_method_names:

        handler = getattr(self, request.method.lower(), self.http_method_not_allowed) #获取方法的小写形式,通过反射的方式进行返回
else:
handler = self.http_method_not_allowed
return handler(request, *args, **kwargs)

所以在自定义get post这些类方法的时候,需要post get都是小写的,因为父类的dispatch已经定义了会去寻找对应的小写的post get方法名

注意CBV必须用as_views()方法处理请求

要用as_views方法必须引入from django import views

下面看一个简单用CBV的方式写的处理用户登陆的例子

为了证明dispatch方法可以处理分发用户的请求,我们可以看到在例子中,用了父类的dispatch方法处理用户的请求,并分别在请求分发前后做了打印

#coding:utf-8
from django.shortcuts import render
from django.shortcuts import redirect
from django import views
from app01 import models class Login(views.View): def dispatch(self, request, *args, **kwargs):
print "before dispatch"
rep = super(Login, self).dispatch(request, *args, **kwargs)
print "after dispatch"
return rep def post(self, request):
# models.Administrator.objects.create(username = "root", password =
# "123123")
msg = ''
print 'start...'
print request.method
username = request.POST.get('username')
password = request.POST.get('password')
c = models.Administrator.objects.filter(username = username,
password = password).count()
d = models.Administrator.objects.filter(username = username,
password = password)
if c:
rep = redirect('/index.html')
rep.set_cookie('username', username, max_age = 20, httponly =
True)
rep.set_signed_cookie('email', "aaabbb", httponly = True)
return rep
else:
msg = "用户名密码有错误"
return render(request, "login.html", {'msg': msg}) def get(self, request, *args, **kargs):
return render(request, 'login.html')

用类的方式编写处理get post,即用CBV的方法处理,可以更好的组织程序,使程序看起来更简洁清晰

django的FBV和CBV的更多相关文章

  1. Django之FBV与CBV

    一.FBV与CBV FBV(function based views),即基于函数的视图:CBV(class based views),即基于类的视图,也是基于对象的视图.当看到这个解释时,我是很萌的 ...

  2. django的FBV和CBV的装饰器例子

    备忘 def auth(func): def inner(request,*args,**kwargs): u = request.COOKIES.get('username111') if not ...

  3. Django之FBV和CBV的用法

    FBV FBV,即 func base views,函数视图,在视图里使用函数处理请求. 以用户注册代码为例, 使用两个函数完成注册 初级注册代码 def register(request): &qu ...

  4. Django的FBV和CB

    Django的FBV和CBV FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述. CBV C ...

  5. django请求生命周期,FBV和CBV,ORM拾遗,Git

    一.django 请求生命周期 流程图: 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post, ...

  6. django——FBV与CBV

    引言 FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以不再赘述. CBV CBV(class bas ...

  7. python 全栈开发,Day84(django请求生命周期,FBV和CBV,ORM拾遗,Git)

    一.django 请求生命周期 流程图: 1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post, ...

  8. django基础 -- 4. 模板语言 过滤器 模板继承 FBV 和CBV 装饰器 组件

    一.语法 两种特殊符号(语法): {{ }}和 {% %} 变量相关的用{{}},逻辑相关的用{%%}. 二.变量 1. 可直接用  {{ 变量名 }} (可调用字符串, 数字 ,列表,字典,对象等) ...

  9. django中的FBV和CBV

    django中请求处理方式有2种:FBV 和 CBV 一.FBV FBV(function base views) 就是在视图里使用函数处理请求. 看代码: urls.py from django.c ...

随机推荐

  1. JavaScript之BOM

    一.什么是BOM? BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行“对话”. 二.Windows对象 Window对象是客户端Ja ...

  2. Css Secret 案例Demo全套

    Css Secret 案例全套 github地址 案例地址 去年买了一本CSS揭秘的css专题书,该书揭示了 47 个鲜为人知的 CSS 技巧,主要内容包括背景与边框.形状. 视觉效果.字体排印.用户 ...

  3. 浅谈API安全设计

    一.简述 安全是恒久的话题,如果不注意防范,会带来很严重的后果.比如: 1.接口被大规模调用消耗系统资源,影响系统的正常访问,甚至系统瘫痪 2.数据泄露 3.伪造(篡改)数据,制造垃圾数据 4.App ...

  4. 常见递归问题 java

    //最长公共子序列 import java.util.*;public class Main { public static void main(String[] args){ int ans = m ...

  5. Scala对MongoDB的增删改查操作

    =========================================== 原文链接: Scala对MongoDB的增删改查操作 转载请注明出处! ==================== ...

  6. 【Unity3D与23种设计模式】享元模式(Flyweight)

    GoF中定义: "使用共享的方式,让一大群小规模对象能更有效地运行" 享元模式一般应用在游戏角色属性设置上 游戏策划需要通过"公式计算"或者"实际测试 ...

  7. USB协议基础知识笔记

    usb协议 功能层: 控制传输.中断传输.块传输(批量传输).同步传输 设备层:管理USB设备.分配地址.读取设备描述符 总线接口层:采用NRZI编码-反向非归零编码(0将前一个电平翻转,1不翻转) ...

  8. 分享PHP中的10个实用函数

    分享PHP中的10个实用函数 PHP的功能越来越强大,里面有着非常丰富的内置函数.资深的PHP程序员对它们可能都很熟悉,但很多参加PHP培训的PHP初学者,仍然对一些非常有用的函数不太熟悉.这篇文章里 ...

  9. HTML定位简介

    转载出处 定位一直是WEB标准应用中的难点,如果理不清楚定位那么可能应实现的效果实现不了,实现了的效果可能会走样.如果理清了定位的原理,那定位会让网页实现的更加完美. 定位的定义:在CSS中关于定位的 ...

  10. EF Core利用Transaction对数据进行回滚保护

    What? 首先,说一下什么是EF Core中的Transaction Transaction允许以原子方式处理多个数据库操作,如果事务已提交,则所有操作都应用于数据库,如果事务回滚,则没有任何操作应 ...