################## 视图 #######################
################## 视图 #######################
################## 视图 #######################
################## 视图 #######################
################## 视图 #######################
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)