视图层

一、视图函数

一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应。响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . . 是任何东西都可以。无论视图本身包含什么逻辑,都要返回响应。

  1. from django.shortcuts import render, HttpResponse, HttpResponseRedirect, redirect
  2. import datetime
  3. // 视图函数current_datetime使用HttpRequest对象作为第一个参数,并且通常称之为request
  4. def current_datetime(request):
  5. now = datetime.datetime.now()
  6. html = "<html><body>It is now %s.</body></html>" % now
  7. // 视图会返回一个HttpResponse对象,其中包含生成的响应。每个视图函数都负责返回一个HttpResponse对象
  8. return HttpResponse(html)
  1. b request s
  2. r -----------------> e
  3. o <----------------- r
  4. w response ve

二、视图层之HttpRequest对象

django将请求报文中的 请求行、首部信息、内容主体 封装成 HttpRequest 类中的属性。 除了特殊说明的之外,其他均为只读的

  1. # 1.前台Post传过来的数据,包装到POST字典中
  2. request.POST
  3. # 2.前台浏览器窗口里携带的数据,包装到GET字典中
  4. request.GET
  5. # 3.前台请求的方式
  6. request.method
  7. # 4.post提交的数据,body体的内容,前台会封装成:name=lqz&age=18&sex=1
  8. request.body
  9. # 5.取出请求的路径,取不到数据部分
  10. request.path # /test/blog/
  11. # 6.取出请求的路径,能取到数据部分
  12. request.get_full_path() # /test/blog?id=1&name=tom
  13. # 7.META,一个标准的Python 字典,包含所有的HTTP 首部
  14. request.META
  15. # 8.一个类似于字典的对象,包含所有的上传文件信息
  16. request.FILES
  17. #FILES 中的每个键为<input type="file" name="" /> 中的name,值则为对应的数据。
  18. # 注意,FILES 只有在请求的方法为POST 且提交的<form> 带有enctype="multipart/form-data" 的情况下才有
  19. # 包含数据。否则,FILES 将为一个空的类似于字典的对象。

三、视图层之HttpResponse对象

响应对象主要有三种形式:

  1. HttpResponse()
  2. render()
  3. redirect()

1、render()

结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象

  1. render(request, 'index.html'[,context])
  2. # 第一个参数是用于生成相应的的请求对象,第二个参数是要使用的模板的名称,第三个参数是添加到模板上下文的字典
  1. # render方法就是将一个模板页面中的模板语法进行渲染,最终渲染成一个html页面作为响应体,render函数相当于
  2. temp=Template('<h1>{{ user }}</h1>')
  3. con=Context({'user':'lqz'})
  4. ret=temp.render(con)
  5. print(ret)
  6. # return render(request,'index.html')
  7. return HttpResponse(ret)

2、redirect()

传递要重定向的一个硬编码的URL

  1. def test(request):
  2. ...
  3. #return redirect('/showbooks/')
  4. return redirect('http://127.0.0.1:8888/showbooks')

四、视图层之JsonResponse对象

  1. from django.http import JsonResponse
  2. def test(request):
  3. dic = {'id':1,'name':'tom'}
  4. # JsonResponse默认只支持字典
  5. return JsonResponse(dic)
  6. # 等价于
  7. import json
  8. def test(request):
  9. dic = {'id':1,'name':'tom'}
  10. return HttpResonse(json.dumps(dic))
  • JsonResponse默认只支持字典
  • 要用其他类型,可以将JsonResponse参数中的safe设为False,即 return JsonResponse(list, safe=False)

五、CBV和FBV

CBV基于类的视图(Class base view)和FBV基于函数的视图(Function base view)

1、CBV(基于类的视图)

  1. # 路由层
  2. url(r'test/', views.Test.as_view()) # 后面视图必须加括号,源码中是返回一个内存地址
  3. # 视图层
  4. # 1.导入view
  5. from django.views import View
  6. # 2.写类
  7. class Test(view): # 必须继承view
  8. def get(self, request): # 方法名字必须为get、post,参数中必须要有request
  9. return HttpResponse('get_test')
  10. def post(self, request):
  11. return HttpResponse('post-test')

2、FBV(基于函数的视图)

  1. # 路由层
  2. url(r'test/', views.show)
  3. # 视图层
  4. def show(request):
  5. return HttpResponse('showbooks')

六、文件上传

1、前端

  1. <form action="" method="post" enctype="multipart/form-data">
  2. <input type="file" name="myfile">
  3. <input type="text" name="password">
  4. <input type="submit" value="提交">
  5. </form>
  • 编码enctype用 ‘ multipart/form-data ’

2、后台,文件上传,存到本地

  1. def fileupload(request):
  2. if request.method=='GET':
  3. return render(request,'fileupload.html')
  4. if request.method=='POST':
  5. # 从字典里根据名字,把文件取出来
  6. myfile=request.FILES.get('myfile')
  7. # 文件名字
  8. name=myfile.name
  9. # 打开文件,把上传过来的文件存到本地
  10. with open(name,'wb') as f:
  11. # for line in myfile.chunks():
  12. for line in myfile:
  13. f.write(line)
  14. return HttpResponse('ok')

Django框架(六)—— 视图层:HttpRequest、HTTPResponse、JsonResponse、CBV和FBV、文件上传的更多相关文章

  1. Django day05 视图层之 (HttpRequest) \ (HttpResponse) \ (JsonResponse) 对象

    一:视图层之HttpRequest对象 # 前台Post传过来的数据,包装到POST字典中 # request.POST # 前台浏览器窗口里携带的数据,包装到GET字典中 # request.GET ...

  2. 一、虚拟环境.二、路由配置主页与404.三、2.x路由分发.四、伪静态.五、request对象.六、FBV与CBV.七、文件上传.

    一.虚拟环境 ''' 解决版本共存 1. 用pycharm选择File点击NewProject然后选择virtualenv创建一个纯净环境 2. 打开下载的目录将venv文件夹下的所有文件(纯净的环境 ...

  3. [Django框架之视图层]

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

  4. java:struts框架3(自定义拦截器,token令牌,文件上传和下载(单/多))

    1.自定义拦截器: struts.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...

  5. django设置并获取cookie/session,文件上传,ajax接收文件,post/get请求及跨域请求等的方法

    django设置并获取cookie/session,文件上传,ajax接收文件等的方法: views.py文件: from django.shortcuts import render,HttpRes ...

  6. Django框架(五)-- 视图层:HttpRequest、HTTPResponse、JsonResponse、CBV和FBV、文件上传

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

  7. Django框架之第四篇(视图层)--HttpRequest对象、HttpResponse对象、JsonResponse、CBV和FBV、文件上传

    视图层 一.视图函数 一个视图函数,简称视图,是一个简单的python函数,它接收web请求并且会返回web响应.响应可以是一张网页的html,一个重定向,或者是一张图片...任何东西都可以.无论是什 ...

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

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

  9. Web框架之Django_03 路由层了解(路有层 无名分组、有名分组、反向解析、路由分发 视图层 JsonResponse,FBV、CBV、文件上传)

    摘要: 路由层 无名分组 有名分组 反向解析 路由分发 名称空间 伪静态网页.虚拟环境 视图层 JsonResponse FBV 与 CBV(function base views与class bas ...

随机推荐

  1. js匿名函数测试

    js匿名函数测试 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  2. python模块学习之testlink (自动回写测试案例执行结果到testlink)

    安装 pip install TestLink-API-Python-client #!/usr/bin/env Python # -*- coding: utf-8 -*- ''' Created ...

  3. jsonp协议 java服务端、JQuery客户端 简单实现原理

    原文链接:https://blog.csdn.net/Activity_Time/article/details/96440806 1. 概述 Jsonp(JSON with Padding) 是 j ...

  4. 破解Xshell6强制升级

    一.背景今天打开xshell时,弹出提示,“要继续使用此程序,您必须应用最新的更新或使用新版本”(如下图) 这是让我强制升级啊,点了确定按钮却提示我已经是最新版了 反正点了半天xshell也没打开.后 ...

  5. PAT(A) 1042. Shuffling Machine (20)

    Shuffling is a procedure used to randomize a deck of playing cards. Because standard shuffling techn ...

  6. OpenSuSe开启sshd服务

    需要测试OpenSuSE11 x64上mysql性能,发现很多东西与centos以及红帽有差别.其中最切身的就是sshd服务的开启. 安装好OpenSuSE 11后,发现ssh连接不上去,可以ping ...

  7. 导出数据库数据到Excel表

    后台需要将用户信息数据导入到Excel表中提供给相关人员: 首先查询数据就不多说了: 导入Excel表直接亮代码(采用的是jxl的jar包提供的方法): public static File Impo ...

  8. java web session共享

    一 搭建环境 操作系统:windows 7 64位 http server:nginx 1.9.7 缓存系统:memcached Servlet容器:apache-tomcat-7.0.65 二 搭建 ...

  9. 小程序图片在安卓上拉伸的问题&导航&返回首页

      今天提了一个bug,有几张图片在安卓上面加载会先变大拉伸再恢复正常 出现这样的问题应该是用widthFix造成的 具体原因还不是很清楚,因为都是本地图片,所以我就直接把高也设置好就暂时没有这个问题 ...

  10. Ansible 和 Playbook 暂存

    Ansible  和  Playbook 暂存 , 也是一个批量管理工具 自动化的批量管理工具 主机清单  HOST Inventory 模块插件  Playbooks 查看ansible的目录结构 ...