Django基础之视图层
内容概要
小白必会三板斧
- request对象方法初识
form表单上传文件
Jsonresponse
FBV与CBV
内容详细
1 小白必会三板斧
- HttpResponse
- render
- redirect
- # 视图函数必须返回一个HttpResponse对象
- # 具体参考HttpResponse源码
2 request方法初识
- '''
- request对象:(
- 1:request.method(判断请求格式)
- 2:request.POST(.get、.getlist)
- 3:request.GET(.get、.getlist)
- 4:request.body(一串二进制)
- 5:request.files(接收文件)
- 6:request.path
- 7:request.path_info
- 8:request.get_full_path(接收完整url及?号后面的参数)
- ...
- )
'''
3 form表单上传文件
- 必须要指定的参数
- 1.method='post'
- 2.enctype='/multipart/form-data/'
- <form action="" method="post" enctype="multipart/form-data">
- <input type="file" name="myfile" multiple>
- <input type="submit" class="btn btn-primary btn-block">
- </form>
-
- def index(request):
- if request.method == 'POST':
- # print(request.POST)
- # print(request.GET)
- # print(request.FILES) # 获取文件数据
- file_obj = request.FILES.get('myfile')
- print(file_obj.name) # 获取文件名
- with open(file_obj.name,'wb') as f:
- for chunk in file_obj.chunks():
- f.write(chunk)
- return render(request,'index.html')
4 Jsonresponse
- JsonRespanse:(
- return JsonRespanse(dict)(默认只能传字典,需要传其他类型需要将safe参数改为False)
- )
5 FBV与CBVFBV 基于函数的视图
- FBV使用频率较低(基础阶段)
- CBV 基于类的视图
- CBV实际开发项目使用频率较高(高级阶段)
- views.py视图层
- 视图函数
- 不仅仅可以是函数也可以是类
- 1.面向过程式编程
- 2.面向对象式编程
- # FBV
- def index(request):
- return HttpResponse('')
- # CBV
- 视图层代码
- from django.views import View
-
-
- class Mylogin(View):
- def get(self,request):
- return HttpResponse('get方法')
- def post(self,request):
- return HttpResponse('post方法')
- 路由层代码
- url(r'^login/', views.Mylogin.as_view())
========================================================
CBV:
csrf_protect:需要校验
csrf_exempt:忽视校验
正常添加装饰器即可
CBV:csrf_protect:可以正常按CBV三种添加方式
csrf_exempt:只能在dispath上加装饰器
6 CBV源码
- # 切入点
- url(r'^login/', views.Mylogin.as_view())
- '''类名点名字还加括号 名字要么是绑定给类的方法 要么是无参函数'''
-
- 1.as_view()绑定给类的方法
- @classonlymethod
- def as_view(cls, **initkwargs)
- 2.CBV路由匹配本质与FBV一致
- # CBV
- url(r'^login/', views.Mylogin.as_view())
- # CBV本质
- # url(r'^login/', views.view)
- 3.匹配成功之后执行view函数代码
- def view(request, *args, **kwargs):
- self = cls(**initkwargs)
- return self.dispatch(request, *args, **kwargs)
- 4.查看dispatch方法(对象查找属性和方法一定要严格按照顺序来)
- def dispatch(self, request, *args, **kwargs):
- # 判断当前请求方法是否符合八个默认的请求方法中
- # 1.get
- if request.method.lower() in self.http_method_names:
- # getattr(对象,'get','拿不到的报错信息') >>> Mylogin里面的get方法
- handler = getattr(self, request.method.lower(), self.http_method_not_allowed)
- else:
- handler = self.http_method_not_allowed
- return handler(request, *args, **kwargs) # get(request,...)
Django基础之视图层的更多相关文章
- [Django框架之视图层]
[Django框架之视图层] 视图层 Django视图层, 视图就是Django项目下的views.py文件,它的内部是一系列的函数或者是类,用来专门处理客户端访问请求后处理请求并且返回相应的数据,相 ...
- Django 学习 之 视图层(views)
一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何 ...
- Django的日常-视图层
目录 Django的日常-3 JsonResponse form表单上传文件 CBV的源码分析 视图层 模板传值 过滤器 标签 自定义过滤器和标签 Django的日常-3 JsonResponse 在 ...
- Django学习之视图层
视图层 小白必会三板斧 HttpResponse render redirect django视图函数必须要给返回一个HttpResponse对象(render和redirect内部返回的也是一个Ht ...
- web框架开发-Django视图层
视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . ...
- django 实战篇之视图层
视图层(views.py) django必会三板斧 HttpResponse >>> 返回字符串 render >>> 支持模板语法,渲染页面,并返回给前端 red ...
- Django视图层
本文目录 1 视图函数 2 HttpRequest对象 3 HttpResponse对象 4 JsonResponse 5 CBV和FBV 6 简单文件上传 回到目录 1 视图函数 一个视图函数,简称 ...
- $Django 虚拟环境,2.0、1.0路由层区别,Httprequest对象,视图层(fbv,cbv),文件上传
1 虚拟环境:解决问题同一台机器上可以运行不同版本的django, 1 用pychanrm创建--->files-->newproject--->选择虚拟环境 2 setting ...
- python 全栈开发,Day69(Django的视图层,Django的模板层)
昨日内容回顾 相关命令: 1 创建项目 django-admin startproject 项目名称 2 创建应用 python manage.py startapp app名称 3 启动项目 pyt ...
随机推荐
- java8中的Optional
Optional类主要解决空指针异常NullPointerException.Optional 类(java.util.Optional)是一个容器类,代表一个值存在或不存在,原来用 null 表示一 ...
- ERROR Invalid options in vue.config.js: "baseUrl" is not allowed
vue项目 我的这个版本是 3.10.0 module.exports = { baseUrl: process.env.NODE_ENV === 'production' ? './' : '/' ...
- C++的指针相关概念
引言 初入c++,肯定会对指针这个概念非常熟悉.但是为什么c/c++要使用指针? 其实每一种编程语言都使用指针,指针并不只是C/C++的独有特性.C++将指针暴露给了用户(程序员),而Java和C#等 ...
- C++逆向分析----多重继承和菱形继承
多重继承 多重继承是指C++类同时继承两个类或两个以上的类. class Test { public: int num1; Test() { num1 = 1; } virtual void Proc ...
- C++ string的size()和length()函数没有区别
C++标准库中的string中两者的源代码如下: size_type __CLR_OR_THIS_CALL length() const { // return ...
- Linux USB ECM Gadget 驱动介绍
1 USB ECM介绍 USB ECM,属于USB-IF定义的CDC(Communication Device Class)下的一个子类:Ethernet Networking Control Mo ...
- CentOS 7 设置时区、日期和时间
CentOS 7 设置时区.日期和时间 changhr2013关注 2019.04.19 01:33:09字数 307阅读 139 在 CentOS 7 中,引入了一个叫 timedatectl 的设 ...
- 强哥node.js学习笔记
node后端语言: nodejs学习大纲:1.node安装2.node repl开发3.node sublime开发4.node 使用5.node 中创建第一个应用6.node 回调函数7.node ...
- 30-- A 代码记录分析
张的代码 30-- -A if(BT_INFO.RX.CACHE == BT_RX_CACHE[0]) { BT_INFO.RX.CACHE = BT_RX_CACHE[1]; } else { B ...
- 3.23 vi/vim:纯文本编辑器
vi/vim 是Linux命令行界面下的文字编辑器,几乎所有的Linux系统都安装了vi,只要学会了vi这个编辑工具,就可以在任何Linux系统上使用它.而vim是vi命令的增强版(Vi IMprov ...