1、FBV(function base views)

在视图里使用函数处理请求。

url:
        re_path('fbv', views.fbv),
        # url(r'^fbv', views.fbv),

func:
        def fbv(requset):
                return render(requset,'fbv_Cbv.html')

2、CBV (class base views)

url:

re_path('cbv', views.Cbv.as_view()),
# url(r'^cbv', views.Cbv.as_view()),

class:

from django.views import View
#导入View模块
class Home(View):  #使用类处理需要继承View(view是Home的父类,Home是子类)  
        def get(self,request): #自动识别,如果用户请求方式:get,那么自动调用该方法执行结果
                print(request.method)
                return render(request, 'home.html')

def post(self,request):
             print(request.method)#自动识别,如果用户请求方式:post,那么自动调用该方法执行结果
            return render(request, 'home.html')

3、FBV+CBV 获取数据、返回数据的命令参数

    A.获取数据的几种方式
        request.method
        request.GET
        request.POST
        request.FILES
        request.path_info
        request.COOKIES
        reqeust.body    #所有内容的原生数据

  B.获取checkbox等多选的内容
        request.POST.getlist()
        request.GET.getlist()

#所以分成两类
        request.body  #用户请求的原生数据,以字符串形式存放

request.PUT
        request.DELECT
        request.MOVE
       #django对上面3种没有做处理,所以我们操作以上3种的时候就需要通过request.body获取原生数据:字符串形式

request.Meta
       #出了数据外,请求头相关的信息,如:判断用户是PC端还是移动端

request.method(POST、GET、PUT..)
       request.path_info
       request.COOKIES

  C.接收上传文件,注意:模板文件html的form标签必须做特殊设置:enctype="multipart/form-data"
        obj = request.FILES.get('file')
        obj.name    #取该文件名
        obj.size       #取该文件的字节大小
        obj.chunks  #取该文件的块

file_path = os.path.join('%s\\upload'%os.path.dirname(os.path.abspath(__file__)), obj.name)  #当前文件的目录下的upload目录和接收文件名进行拼接成文件路径
        f = open(obj.name,mode= 'wb') #如果该路径文件存在就打开,不存在就创建
        for item in obj.chunks():
            f.write(item) #写入文件
        f.close()     #关闭文件
            
 D、返回给用户的几种方式  

return render(request,'模板路径.html',{'list':[1,2,3,4],'dict': {'k1':'v1','k2':'v2'} })  #返回给用户指定经过模板渲染后的html
        retune redirect(’url路径’)        #跳转到指定url
        retune HttpResponse(‘字符串’)  #直接返回给用户字符串

response = HttpResponse(a)
       response.set_cookie(‘key’:’value’)  #设置客户端cookie
       response[‘name’] = ‘bur’   #设置客户端响应头
       return response

4、FBV+CBV 添加验证装饰器

A、FBV添加装饰器

def auth(func):
def deco(request, *args, **kwargs):
u = request.get_signed_cookie('username', salt='user', default=None)
if not u:
return render(request, 'login.html')
return func(request, *args, **kwargs)
return deco @auth
def index(request):
u = request.get_signed_cookie('username', salt='user', default=None)
return render(request, 'index.html', {'user': u}) @auth
def detail(request):
u = request.get_signed_cookie('username', salt='user', default=None)
return render(request, 'detail.html', {'user': u}) 访问index/detail时,调用auth装饰器,如果验证成功,则执行index/detail(return func(request, *args, **kwargs)语句起的作用);
否则跳转到login.html

B、CBV方式添加装饰器:通过django自带的装饰器method_decorator 的@method_decorator(cookie)来实现

from django.utils.decorators import method_decorator
from django import views # @method_decorator(cookie,name='dispatch') # dispatch的便捷写法
class CBVtest(views.View):
@method_decorator(cookie) # 给dispatch方法添加装饰器,那么下面所有的get,post都会添加
def dispatch(self, request, *args, **kwargs):
return super(CBVtest, self).dispatch(request, *args, **kwargs) # @method_decorator(cookie) # 单独添加
def get(self, request):
u = request.get_signed_cookie('username', salt='user', default=None)
return render(request, 'houtai.html', {'user': u}) def post(self, request):
return HttpResponse('post ok')

django FBV +CBV 视图处理方式总结的更多相关文章

  1. Django FBV CBV以及使用django提供的API接口

    FBV 和 CBV 使用哪一种方式都可以,根据自己的情况进行选择 看看FBV的代码 URL的写法: from django.conf.urls import url from api import v ...

  2. Django FBV/CBV、中间件、GIT使用

    s5day82 内容回顾: 1. Http请求本质 Django程序:socket服务端 a. 服务端监听IP和端口 c. 接受请求 \r\n\r\n:请求头和请求体 \r\n & reque ...

  3. [oldboy-django][2深入django]FBV + CBV + 装饰器

    FBV django CBV & FBV - FBV function basic view a. urls 设置 urls(r'^test.html$', views.test) b. vi ...

  4. Django之CBV视图源码分析(工作原理)

    1.首先我们先在urls.py定义CBV的路由匹配. FBV的路由匹配: 2.然后,在views.py创建一名为MyReg的类: 注意:该类必须继续View类,且方法名必须与请求方式相同(后面会详解) ...

  5. Django 路由视图FBV/CBV

    路由层  url路由层结构 from django.conf.urls import url from django.contrib import admin from app01 import vi ...

  6. django——FBV与CBV

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

  7. Django的CBV与FBV

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

  8. Django的 CBV和FBV

    FBV CBV 回顾多重继承和Mixin 回到顶部 FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django的学习中,我们一直使用的是这种方式,所以 ...

  9. Django 之 CBV & FBV

    FBV FBV(function base views) 就是在视图里使用函数处理请求. 在之前django随笔中,一直使用的是这种方式,不再赘述. CBV CBV(class base views) ...

随机推荐

  1. k8s/02中文文档学习笔记

    k8s中文文档 一.k8s概述 Kubernetes:是一个开源的,用于管理云平台中多个主机上的容器化的应用 k8s设计目标:让部署容器化的应用简单并且高效 大规模容器集群管理工具,从Borg到Kub ...

  2. ubuntu/如何启动、关闭和设置ubuntu防火墙

    由于LInux原始的防火墙工具iptables过于繁琐,所以ubuntu默认提供了一个基于iptable之上的防火墙工具ufw. ubuntu 9.10默认的便是UFW防火墙,它已经支持界面操作了.在 ...

  3. 第十三周学习总结 Java的异常

    java的核心思想 面向对象的编程思想 类和类的关系 类中成员的描述 对象创建 Java工具类 包装类 数学相关 日期相关 字符串相关 集合相关的类 考试机 学生 老师 --------------- ...

  4. Spark-Core RDD依赖关系

    scala> var rdd1 = sc.textFile("./words.txt") rdd1: org.apache.spark.rdd.RDD[String] = . ...

  5. PHP通过exec执行git pull

    目标 项目没有使用Jenkins部署,使用的是Gitlab+ECS,要实现代码的自动部署 想法 使用Gitlab的钩子,当某个分支的代码提交之后,访问一个URL,实现代码的自动部署.这里使用PHP的e ...

  6. 前端UI库推荐(pc和移动)

    此推荐个人喜好,不喜勿喷. 1. pc 端 elementUI (生态强大,样式生硬) iview (推荐,组件丰富) bootStrap layUI easyUi 2. 移动端 mintUI ant ...

  7. #define 宏实现函数功能可能存在的问题

    #define 宏实现函数功能的问题 情形1 #define free_ptr(p) \ if(p) delete p; p = nullptr; 在调用free_ptr(p)的地方展开看这段代码: ...

  8. 使用`html-webpack-plugin`插件配置启动页面

    由于使用`--contentBase`指令的过程比较繁琐,需要指定启动的目录,同时还需要修改index.html中script标签的src属性,所以推荐大家使用`html-webpack-plugin ...

  9. Windows系统下安装MySQL详细教程(命令安装法)

    1.安装包下载. 下载地址:https://dev.mysql.com/downloads/mysql/ 点击下载之后,可以选择注册Oracle账号,也可以跳过直接下载. 下载完成后,选择一个磁盘内放 ...

  10. 继续死磕python

    一.数据运算 算术运算 比较运算 赋值运算 逻辑运算 成员运算 身份运算 位运算 其中左右移运算是逻辑左右移即缺失位补0,而算数右移缺失补符号位(注意逻辑运算都是补码运算即都取补码再运算,然后结果也是 ...