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. 重载Prometheus配置

    发送SIGHUP信号给应用程序的主进程: pid ‘’-1‘’是指“终端断线” 发送post请求给指定端点: curl -XPOST http://ip:9090/-/reload 对于此种方法要注意 ...

  2. ContextLoaderListener错误

    在web.xml中添加如下配置 <context-param> <param-name>contextConfigLocation</param-name> < ...

  3. Win10使用自带功能创建系统映像备份时D盘被包含进去问题的解决

    在使用Windows10系统时,使用Windows自带功能创建系统映像备份文件时碰到了一些问题,所以在此记录一下. 创建系统映像文件的步骤,如下: 1.打开 控制面板 -> 选择 系统和安全 - ...

  4. [Vim] 02 用 Windows 下的 gVim 假装 Linux 下的 Vim

    0. 前言 这应该是极简配置,"极简"就是字面意思 我安装的版本是 8.1.1 来看个素颜 1. 找到 _vimrc 文本 我装在 E:\Program Files (x86)\V ...

  5. Linux /dev/shm

    /dev/shm是Linux下的一个目录,/dev/shm目录不在磁盘上,而是在内存中,因此使用Linux /dev/shm的效率非常高,直接写进内存 可以通过两个脚本验证Linux /dev/shm ...

  6. uva-315.network(连通图的割点)

    本题大意:求一个无向图额割点的个数. 本题思路:建图之后打一遍模板. /**************************************************************** ...

  7. Vue 2.0 入门系列(15)学习 Vue.js 需要掌握的 es6 (2)

    类与模块 类 es6 之前,通常使用构造函数来创建对象 // 构造函数 User function User(username, email) { this.username = username; ...

  8. dfs(最佳路径)

    http://acm.hdu.edu.cn/showproblem.php?pid=1242 Rescue Time Limit: 2000/1000 MS (Java/Others)    Memo ...

  9. 如何将DataTable转换成List<T>

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.D ...

  10. mongodb连接警告修复

    问题 Node.js中mongoose模块连接MongoDB数据库时提示(node:12580) DeprecationWarning: current URL string parser is de ...