django框架基础-视图-长期维护-20200115

##################   视图     #######################

##################   视图     #######################

##################   视图     #######################

##################   视图     #######################

##################   视图     #######################

python-django框架研究-Django的View(视图)

1,视图:

一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。

响应可以是一张网页的HTML内容(使用render),一个重定向(使用redirect),一个404错误,一个XML文档,或者一张图片。

无论视图本身包含什么逻辑,都要返回响应。代码写在哪里也无所谓,只要它在你当前项目目录下面。除此之外没有更多的要求了——可以说“没有什么神奇的地方”。为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。

视图就是接收一个请求,返回一个响应,就是那些对应关系的处理函数,

我有一个疑问,这个视图如果不放在view.py文件,应该怎么放?

2,CBV和FBV

CBV就是class base view  FBV就是function base view,

之前都是写的基于函数的视图,现在要写一个基于类的视图,

写对应关系的时候有变化:

# url(r'^add_publisher/', views.add_publisher),#这是FBV
url(r'^add_publisher/', views.AddPublisher.as_view()),##这是CBV

3,Request对象

request.method  获取请求的方法,get,post

request.GET   返回一个字典对象,通常是用来获取url里面的参数,

request.POST   返回一个字典对象,通常是一个表单提交的数据,

request.path_info  这是获取用户请求的路径,路径后面的参数是不会取到的,

reuqest.body  这是获取请求的body,get请求的body是空的,post请求的body是填写的内容,

        b'publisher=%E4%B8%9C%E5%9F%8E%E5%87%BA%E7%89%88%E7%A4%BE22'

        这个数据对于我们没有用啊,

4,上传文件,

<form action="/upload/" method="post" enctype="multipart/form-data">
{#enctype="multipart/form-data" 这一句一定要写,否则会导致上传文件拿不到的,#}
{#文件和不同的字符串是不一样的,如果文件比较大,会一点一点的传#}
<input type="file" name="upload_file">
<input type="submit" value="开始上传">
</form>

读取:

if request.method == "POST":
# 从请求的FILES中获取上传文件的文件名,file为页面上type=files类型input的name属性值
filename = request.FILES["upload_file"].name #这是拿到了文件名,
# 在项目目录下新建一个文件
with open(filename, "wb") as f: #wb以二进制的方式,
# 从上传的文件对象中一点一点读
for chunk in request.FILES["upload_file"].chunks(): #chunks():这是一个固定的写法,一点点的传值,
# FILES["upload_file"] 这个列表中的是在html定义的file的name,所以可以写多个,
# 写入本地文件
f.write(chunk)
return HttpResponse("上传OK")

5,response

基础必备三件套,

1,httpresponse,这是返回一个字符串

2,render,这是返回一个页面

3,redirect,这是返回一个重定向,告诉浏览器再去访问另外的网址,

--------------------------------

4,jsonresponse对象,

真实的web开发,不是既写前端,又写后端的,你只需要写后端,后端给前端返回的数据都是什么格式的呢???

返回的都是json字符串,这是一种通用的数据格式,前端js拿到之后把数据渲染到页面上,

from django.http import JsonResponse
return JsonResponse(data)

猜你喜欢

转载自www.cnblogs.com/andy0816/p/12197669.html