内容概要

  • 小白必会三板斧

  • request对象方法初识
  • form表单上传文件

  • Jsonresponse

  • FBV与CBV

内容详细

1 小白必会三板斧

  1. HttpResponse
  2. render
  3. redirect
  4. # 视图函数必须返回一个HttpResponse对象
  5.  
  6. # 具体参考HttpResponse源码

2 request方法初识

  1. '''
  1. request对象:(
  2. 1request.method(判断请求格式)
  3. 2request.POST(.get、.getlist
  4. 3request.GET(.get、.getlist
  5. 4request.body(一串二进制)
  6. 5request.files(接收文件)
  7. 6request.path
  8. 7request.path_info
  9. 8request.get_full_path(接收完整url及?号后面的参数)
  10. ...

  1. '''

3 form表单上传文件

  1. 必须要指定的参数
  2. 1.method='post'
  3. 2.enctype='/multipart/form-data/'
  4. <form action="" method="post" enctype="multipart/form-data">
  5. <input type="file" name="myfile" multiple>
  6. <input type="submit" class="btn btn-primary btn-block">
  7. </form>

  8. def index(request):
  9. if request.method == 'POST':
  10. # print(request.POST)
  11. # print(request.GET)
  12. # print(request.FILES) # 获取文件数据
  13. file_obj = request.FILES.get('myfile')
  14. print(file_obj.name) # 获取文件名
  15. with open(file_obj.name,'wb') as f:
  16. for chunk in file_obj.chunks():
  17. f.write(chunk)
  18. return render(request,'index.html')

4 Jsonresponse

  1. JsonRespanse:(
  2. return JsonRespansedict)(默认只能传字典,需要传其他类型需要将safe参数改为False

5 FBV与CBVFBV 基于函数的视图

  1. FBV使用频率较低(基础阶段)
  2. CBV 基于类的视图
  3. CBV实际开发项目使用频率较高(高级阶段)
  4. views.py视图层
  5. 视图函数
  6. 不仅仅可以是函数也可以是类
  7. 1.面向过程式编程
  8. 2.面向对象式编程
  9. # FBV
  10. def index(request):
  11. return HttpResponse('')
  12. # CBV
  13. 视图层代码
  14. from django.views import View


  15. class Mylogin(View):
  16. def get(self,request):
  17. return HttpResponse('get方法')
  18. def post(self,request):
  19. return HttpResponse('post方法')
  20. 路由层代码
  21. url(r'^login/', views.Mylogin.as_view())
    ========================================================
    CBV
        url(r'^index/',views.类名.as_view())
  FBV:        
        url(r^index/',views.视图函数名)
 
      1:as_view()里面返回了一个view函数(所以CBV本质也是FBV)
      2:匹配路由调用view时,view里面生成了一个当前类(自己写的类)的对象,并返回了一个dispatch方法
      3:dispatch方法里判断了当前请求的格式并将其变形成全小写的字符串,再判断当前请求格式是否合法,如果合法,就将该字符串通过反射方法将其调用并返回(get、post)---> def get:.../def post:...
 
CBV的本质也是和FBV一样,都是路由+视图函数内存地址
 
=====================================
 
CBV添加装饰器的三种方式:(先导入method_decorader模块)
 
1:放方法头上(指名道姓)
 
2:放他父类头上(可针对性的加装饰器,扩展性强)
 
3:重写dispatch方法(放dispatch头上)(作用于所有方法)
 
FBV:导入:from django.view.decorators.csrf import csrf_protect,csrf_exempt

 

csrf_protect:需要校验

 

csrf_exempt:忽视校验

 
 

正常添加装饰器即可

 
 

CBV:csrf_protect:可以正常按CBV三种添加方式

 

csrf_exempt:只能在dispath上加装饰器

 
 

6 CBV源码

  1. # 切入点
  2. url(r'^login/', views.Mylogin.as_view())
  3. '''类名点名字还加括号 名字要么是绑定给类的方法 要么是无参函数'''

  4. 1.as_view()绑定给类的方法
  5. @classonlymethod
  6. def as_view(cls, **initkwargs)
  7. 2.CBV路由匹配本质与FBV一致
  8. # CBV
  9. url(r'^login/', views.Mylogin.as_view())
  10. # CBV本质
  11. # url(r'^login/', views.view)
  12. 3.匹配成功之后执行view函数代码
  13. def view(request, *args, **kwargs):
  14. self = cls(**initkwargs)
  15. return self.dispatch(request, *args, **kwargs)
  16. 4.查看dispatch方法(对象查找属性和方法一定要严格按照顺序来)
  17. def dispatch(self, request, *args, **kwargs):
  18. # 判断当前请求方法是否符合八个默认的请求方法中
  19. # 1.get
  20. if request.method.lower() in self.http_method_names:
  21. # getattr(对象,'get','拿不到的报错信息') >>> Mylogin里面的get方法
  22. handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
  23. else:
  24. handler = self.http_method_not_allowed
  25. return handler(request, *args, **kwargs) # get(request,...)

Django基础之视图层的更多相关文章

  1. [Django框架之视图层]

    [Django框架之视图层] 视图层 Django视图层, 视图就是Django项目下的views.py文件,它的内部是一系列的函数或者是类,用来专门处理客户端访问请求后处理请求并且返回相应的数据,相 ...

  2. Django 学习 之 视图层(views)

    一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何 ...

  3. Django的日常-视图层

    目录 Django的日常-3 JsonResponse form表单上传文件 CBV的源码分析 视图层 模板传值 过滤器 标签 自定义过滤器和标签 Django的日常-3 JsonResponse 在 ...

  4. Django学习之视图层

    视图层 小白必会三板斧 HttpResponse render redirect django视图函数必须要给返回一个HttpResponse对象(render和redirect内部返回的也是一个Ht ...

  5. web框架开发-Django视图层

    视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . ...

  6. django 实战篇之视图层

    视图层(views.py) django必会三板斧 HttpResponse >>> 返回字符串 render >>> 支持模板语法,渲染页面,并返回给前端 red ...

  7. Django视图层

    本文目录 1 视图函数 2 HttpRequest对象 3 HttpResponse对象 4 JsonResponse 5 CBV和FBV 6 简单文件上传 回到目录 1 视图函数 一个视图函数,简称 ...

  8. $Django 虚拟环境,2.0、1.0路由层区别,Httprequest对象,视图层(fbv,cbv),文件上传

    1 虚拟环境:解决问题同一台机器上可以运行不同版本的django,  1 用pychanrm创建--->files-->newproject--->选择虚拟环境  2 setting ...

  9. python 全栈开发,Day69(Django的视图层,Django的模板层)

    昨日内容回顾 相关命令: 1 创建项目 django-admin startproject 项目名称 2 创建应用 python manage.py startapp app名称 3 启动项目 pyt ...

随机推荐

  1. java8中的Optional

    Optional类主要解决空指针异常NullPointerException.Optional 类(java.util.Optional)是一个容器类,代表一个值存在或不存在,原来用 null 表示一 ...

  2. ERROR Invalid options in vue.config.js: "baseUrl" is not allowed

    vue项目 我的这个版本是 3.10.0 module.exports = { baseUrl: process.env.NODE_ENV === 'production' ? './' : '/' ...

  3. C++的指针相关概念

    引言 初入c++,肯定会对指针这个概念非常熟悉.但是为什么c/c++要使用指针? 其实每一种编程语言都使用指针,指针并不只是C/C++的独有特性.C++将指针暴露给了用户(程序员),而Java和C#等 ...

  4. C++逆向分析----多重继承和菱形继承

    多重继承 多重继承是指C++类同时继承两个类或两个以上的类. class Test { public: int num1; Test() { num1 = 1; } virtual void Proc ...

  5. C++ string的size()和length()函数没有区别

    C++标准库中的string中两者的源代码如下:      size_type   __CLR_OR_THIS_CALL   length()   const     { //   return   ...

  6. Linux USB ECM Gadget 驱动介绍

    ​1 USB ECM介绍 USB ECM,属于USB-IF定义的CDC(Communication Device Class)下的一个子类:Ethernet Networking Control Mo ...

  7. CentOS 7 设置时区、日期和时间

    CentOS 7 设置时区.日期和时间 changhr2013关注 2019.04.19 01:33:09字数 307阅读 139 在 CentOS 7 中,引入了一个叫 timedatectl 的设 ...

  8. 强哥node.js学习笔记

    node后端语言: nodejs学习大纲:1.node安装2.node repl开发3.node sublime开发4.node 使用5.node 中创建第一个应用6.node 回调函数7.node ...

  9. 30-- A 代码记录分析

    张的代码 30--  -A if(BT_INFO.RX.CACHE == BT_RX_CACHE[0]) { BT_INFO.RX.CACHE = BT_RX_CACHE[1]; } else { B ...

  10. 3.23 vi/vim:纯文本编辑器

    vi/vim 是Linux命令行界面下的文字编辑器,几乎所有的Linux系统都安装了vi,只要学会了vi这个编辑工具,就可以在任何Linux系统上使用它.而vim是vi命令的增强版(Vi IMprov ...