##################   什么是视图?     #######################

  1. 视图:
  2.  
  3. 1,一个视图函数(类),简称视图,是一个简单的Python 函数(类),它接受Web请求并且返回Web响应。
  4. 2,响应可以是一张网页的HTML内容(使用render),一个重定向(使用redirect),一个404错误,一个XML文档,或者一张图片。
  5. 3,无论视图本身包含什么逻辑,必须要返回响应,否则程序会报错。
    为了将代码放在某处,大家约定成俗将视图放置在项目(project)或应用程序(app)目录中的名为views.py的文件中。

##################   视图----CBV和FBV  #######################

  1. CBVFBV
  2. CBV就是class base view FBV就是function base view
  3. 之前都是写的基于函数的视图,现在要写一个基于类的视图,
  4.  
  5. 写对应关系的时候有变化:
  6. # url(r'^add_publisher/', views.add_publisher),#这是FBV
  7. url(r'^add_publisher/', views.AddPublisher.as_view()),##这是CBV

###########################################################

  1. # CBV版添加班级
  2. from django.views import View
  3. class AddClass(View):
  4.  
  5. def get(self, request):
  6. return render(request, "add_class.html")
  7.  
  8. def post(self, request):
  9. class_name = request.POST.get("class_name")
  10. models.Classes.objects.create(name=class_name)
  11. return redirect("/class_list/")

##################   视图--Request对象     #######################

  1. Request对象
  2.  
  3. request.path_info 这是获取用户请求的路径,路径后面的参数是不会取到的,
  4. request.method 获取请求的方法,getpost
  5. request.GET 返回一个字典对象,通常是用来获取url里面的参数,
  6. request.POST 返回一个字典对象,通常是一个表单提交的数据,
  7. reuqest.body byte类型.这是获取请求的bodyget请求的body是空的,post请求的body是填写的内容,这个不常用,

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

上传文件的HTML代码:

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

对应的视图函数:

  1. # 处理上传的文件,
  2. def upload(request):
  3. """
  4. 保存上传文件前,数据需要存放在某个位置。默认当上传文件小于2.5M时,django会将上传文件的全部内容读进内存。从内存读取一次,写磁盘一次。
  5. 但当上传文件很大时,django会把上传文件写到临时文件中,然后存放到系统临时文件夹中。
  6. :param request:
  7. :return:
  8. """
  9. if request.method == "POST":
  10. # 从请求的FILES中获取上传文件的文件名,file为页面上type=files类型input的name属性值
  11. filename = request.FILES["upload_file"].name # 这是拿到了文件名,
  12. # 在项目目录下新建一个文件
  13. with open(filename, "wb") as f: # wb以二进制的方式,
  14. # 从上传的文件对象中一点一点读
  15. for chunk in request.FILES["upload_file"].chunks(): # chunks():这是一个固定的写法,一点点的传值,
  16. # FILES["upload_file"] 这个列表中的是在html定义的file的name,所以可以写多个,
  17. # 写入本地文件
  18. f.write(chunk)
  19. return HttpResponse("上传OK")
  20. else:
  21. return render(request, 'file_upload.html')

##################   视图--response对象     #######################

  1. response对象
  2. 基础必备三件套,
  3. 1httpresponse,这是返回一个字符串
  4. 2render,这是返回一个页面
  5. 3redirect,这是返回一个重定向,告诉浏览器再去访问另外的网址,

##################   视图---jsonresponse对象     #######################

  1. jsonresponse对象,
  2. 真实的web开发,不是既写前端,又写后端的,你只需要写后端,后端给前端返回的数据都是什么格式的呢???
  3. 返回的都是json字符串,这是一种通用的数据格式,前端js拿到之后把数据渲染到页面上,

代码:

  1. def json_test(request):
  2. data = {'name': 'xiaohei', 'age': ''}
  3. data2 = [1, 2, 3, 4]
  4. ################################################################
  5. # import json
  6. # json_data=json.dumps(data) #这是转换成一个json字符串,
  7. # return HttpResponse(json_data)
  8. # 这是你写api的时候一个非常常用的需求,就是把数据封装成一个json传给前端,然后让前端去处理,
  9. ##################################################################
  10. # 还有一个简单的方法,django内置了一个jsonresponse,
  11. from django.http import JsonResponse
  12. return JsonResponse(data)
  13. return JsonResponse(data2, safe=False)
  14. # 如果传的列表会有问题,但是加上safe=False,可以传到前端,但是一般不会传列表过去,

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

  1. 常用视图响应的方式是什么?
  2.  
  3. response对象
  4. 基础必备三件套,
  5. 1httpresponse,这是返回一个字符串
  6. 2render,这是返回一个页面
  7. 3redirect,这是返回一个重定向,告诉浏览器再去访问另外的网址,
  8.  
  9. 4,返回json数据,可以使用JsonResponse来构造响应对象
  10.  
  11. 帮助我们将数据转换为json字符串
  12. 设置响应头Content-Type application/json
  13. 例子:from django.http import JsonResponse
  14. def demo_view(request):
  15. return JsonResponse({‘city’: beijing’, subject’: python’})

###################################################

###################################################

###################################################

django框架基础-视图系统-长期维护的更多相关文章

  1. django框架基础-路由系统-长期维护

    ##################   路由系统介绍    ####################### 路由系统就是路径和函数的对应关系, 路由系统可以看成支撑你这个网站的目录,就像是一本书一样 ...

  2. django框架基础-ORM进阶-长期维护

    ###############    ORM进阶---contenttype    ################ 设计思路: """ 路飞有两种课,专题课和学位课, ...

  3. Django框架简介-视图系统

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

  4. django框架进阶-使用缓存-长期维护

    ###############   django-缓存页面    ############### ########################################### # 全站缓存, ...

  5. django框架进阶-form组件-长期维护

    ##################     form组件做了什么事情?      ####################### 之前web开发的模式,以注册为例 1,要有一个注册页面,然后有一个f ...

  6. django框架进阶-ModelForm组件-长期维护

    ############################################################ """ 通常在Django项目中,我们编写的大部 ...

  7. 将Python的Django框架与认证系统整合的方法

    将Python的Django框架与认证系统整合的方法 这篇文章主要介绍了将Python的Django框架与认证系统整合的方法,包括指定认证后台和编写认证后台等内容,需要的朋友可以参考下 将Django ...

  8. Django框架03 /视图相关

    Django框架03 /视图相关 目录 Django框架03 /视图相关 1. 请求相关 2.响应相关 3.FBV和CBV 视图(视图函数和视图类) 3.1 类视图 CBV 3.2 视图函数 FBV ...

  9. Django框架——基础之视图系统(View.py)

    Django框架之View.py(视图文件) 1. 视图简介 视图层是Django处理请求的核心代码层,我们大多数Python代码都集中在这一层面. 它对外接收用户请求,对内调度模型层和模版层,统合数 ...

随机推荐

  1. 干货 | DRDS 与TiDB浅析

    干货 | DRDS 与TiDB浅析 北京it爷们儿 京东云开发者社区  4月17日 在谈论数据库架构和数据库优化的时候,会常听到"分库分表"."分片".&quo ...

  2. mysql的常见面试问题

    1.如何登陆mysql数据库 MySQL -u username -p 2.如何开启/关闭mysql服务 service mysql start/stop 3.查看mysql的状态 service m ...

  3. [极客大挑战 2019]EasySQL

    万能密码直接登陆得到flag admin' or 1=1 #

  4. Mybatis实现if trim(四)

    1. 准备 请先完成Mybatis实现增删改查(二)和Mybatis实现条件查询(三)的基本内容 2. 关于多条件查询的疑问 在Mybatis实现条件查询(三)中我们实现了多条件(商品编码.商品名称. ...

  5. Linux--shell 计算时间差

    参考:https://www.cnblogs.com/leixingzhi7/p/6281675.html starttime=`date +'%Y-%m-%d %H:%M:%S'` #执行程序 en ...

  6. CodeForces 382B 数学推导

    这个题目题意简单,但是TLE得哭哭的... 输入 a b w x c五个数,最终要使得c<=a, 每一秒可以进行一个操作,如果b>=x,则 b=b-x,同时 c--;如果b<x,则a ...

  7. 干货 | IP高防使用配置

    一.知识简介 DoS(Denial of Service),即拒绝服务攻击.该攻击是利用目标系统网络服务功能缺陷或者直接消耗其系统资源,目的是使该目标客户的系统不可用,无法提供正常的服务. DDoS( ...

  8. java线程——notify通知的泄露

    版权声明:本文为CSDN博主「兰亭风雨」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/ns_code/ar ...

  9. PAT Basic 1070 结绳(25) [排序,贪⼼]

    题目 给定⼀段⼀段的绳⼦,你需要把它们串成⼀条绳.每次串连的时候,是把两段绳⼦对折,再如下图所示套接在⼀起.这样得到的绳⼦⼜被当成是另⼀段绳⼦,可以再次对折去跟另⼀段绳⼦串连.每次串 连后,原来两段绳 ...

  10. [原]C++新标准之std::ratio

    原 总结 ratio  概览 类定义 预定义ratio 应用 示例代码 参考资料 概览 std::ratio定义在<ratio>文件中,提供了编译期的比例计算功能.为std::chrono ...