一、视图函数

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

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

二、视图层之HttpRequest对象

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

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

三、视图层之HttpResponse对象

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

HttpResponse()
render()
redirect()

1、render()

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

render(request, 'index.html'[,context])
# 第一个参数是用于生成相应的的请求对象,第二个参数是要使用的模板的名称,第三个参数是添加到模板上下文的字典

2、redirect()

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

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

四、视图层之JsonResponse对象

from django.http import JsonResponse

def test(request):
dic = {'id':1,'name':'tom'}
# JsonResponse默认只支持字典
return JsonResponse(dic) # 等价于
import json
def test(request):
dic = {'id':1,'name':'tom'}
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(基于类的视图)

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

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

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

六、文件上传

1、前端

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

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

def fileupload(request):
if request.method=='GET':
return render(request,'fileupload.html')
if request.method=='POST':
# 从字典里根据名字,把文件取出来
myfile=request.FILES.get('myfile')
# 文件名字
name=myfile.name
# 打开文件,把上传过来的文件存到本地
with open(name,'wb') as f:
# for line in myfile.chunks():
for line in myfile:
f.write(line)
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、文件上传

    目录 视图层 一.视图函数 二.视图层之HttpRequest对象 三.视图层之HttpResponse对象 四.视图层之JsonResponse对象 五.CBV和FBV 六.文件上传 视图层 一.视 ...

  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. LG1983 「NOIP2013」车站分级 拓扑排序

    问题描述 LG1983 题解 考虑建立有向边\((a,b)\),代表\(a\)比\(b\)低级. 于是枚举每一辆车次经过的车站\(x \in [l,r]\),如果不是车辆停靠的车站,则从\(x\)向每 ...

  2. 继上篇博客对安卓爬虫以及TextView更新的问题解释

    只能在主线程更新ui,或者用handler传输.爬虫是在另一个异步线程进行,所以爬出来的数据对控件赋值就比较麻烦.这次使用了线程数据传到runnable将数据传到handler进行赋值. 结果图: 源 ...

  3. ACE网络编程:IPC SAP、ACE_SOCKET和TCP/IP通信实例

    socket.TLI.STREAM管道和FIFO为访问局部和全局IPC机制提供广泛的接口.但是,有许多问题与这些不统一的接口有关联.比如类型安全的缺乏和多维度的复杂性会导致成问题的和易错的编程.ACE ...

  4. VC修改本机IP地址

    http://www.vcchar.com/thread-1527-1-1.html 设置IP地址只需要更改注册表中关于适配器的相应设置,但更改后需要重新启动系统才能生效,而AddIPAddress函 ...

  5. [LeetCode] 904. Fruit Into Baskets 水果装入果篮

    In a row of trees, the i-th tree produces fruit with type tree[i]. You start at any tree of your cho ...

  6. [LeetCode] 215. Kth Largest Element in an Array 数组中第k大的数字

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...

  7. eclipse web 新建servers时选中tomcat版本后不能继续操作,next是灰色.

    解决方案: 1.退出 eclipse2.到[工程目录下]/.metadata/.plugins/org.eclipse.core.runtime3.把org.eclipse.wst.server.co ...

  8. VSCode打字特效Power Mode插件

    由于最近比较频繁使用VSCode这个软件写代码,然后里面有一个非常炫酷的打字特效插件,平时写代码的时候不会感觉太枯燥(其实就是装一下逼吧)! 安装很简单,但是容易忘,所以这里整理一下具体的部署步骤. ...

  9. 百度前端技术学院task1.10

    任务十:Flexbox 布局练习 面向人群: 有一定HTML及CSS基础的同学 难度: 中 重要说明 百度前端技术学院的课程任务是由百度前端工程师专为对前端不同掌握程度的同学设计.我们尽力保证课程内容 ...

  10. 【JVM】【linux】linux上执行jmap命令查看JVM内存使用情况,报错:sun.jvm.hotspot.debugger.NoSuchSymbolException: Could not find symbol "gHotSpotVMTypes" in any of the known library name

    运行命令: jmap -heap 报错如下: Attaching to process ID , please wait... sun.jvm.hotspot.debugger.NoSuchSymbo ...