62.Django05——视图层

Posted heirenxilou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了62.Django05——视图层相关的知识,希望对你有一定的参考价值。

一、视图函数

视图函数,属于Django的视图层,也就是我们之前将的Django生命周期中定义在views.py里的函数,是用来处理web请求信息以及返回响应信息的函数。视图函数只需要熟练掌握两个对象:请求对象HttpRequest和响应对象HttpResponse

二、三板斧

HttpResponse对象的响应可以是任何形式的内容,尅是一个html文件的内容,一个重定向等等。显影对象主要有三种形式,就是我们说的三板斧HttpResponse,render,redirect

1.HttpResponse()

括号里直接返回一个字符串。

2.render()

render(request, template_name[, context])

参数:

1、request:用于生成响应的请求对象,固定必须传入的第一个参数

2、template_name:要使用的模板的完整名称,必须传入,render默认会去templates目录下查找模板文件

3、context:可选参数,可以传入一个字典用来替换模块文件中的变量

综上,render的功能可以总结为:根据给定字典渲染模板文件,并返回一个渲染后的 HttpResponse对象。

3.redirect()

返回重定向信息

def my_view(request): ... return redirect(/some/url/) 

重定向的地址也可以是一个完整的URL:

def my_view(request): ... return redirect(http://www.baidu.com/) 

三、JsonResponse

要想跨语言操作,前后端数据交互需要使用到json作为过渡 实现跨语言传输数据

在不用JsonResponse的情况下怎么返回json序列化的数据呢

先转成json格式字符串
# json_str = json.dumps(user_dict,ensure_ascii=False)
# 将该字符串返回
# return HttpResponse(json_str)

我们在用JsonResponse来改写上面这两句

return JsonResponse(user_dict,json_dumps_params={ensure_ascii:False})

可以发现

Django中JsonResponse其实就是结合了python中json序列化和HttpResponse两步,并增加新的功能

具体地向前端返回一个json格式字符串有两种方法

第一种

import json

def my_view(request):
    data=[egon,kevin]
    return HttpResponse(json.dumps(data) )

第二种

from django.http import JsonResponse

def my_view(request):
    data=[egon,kevin]
    return JsonResponse(data,safe=False)
    #默认safe=True代表只能序列化字典对象,safe=False代表可以序列化字典以外的对象

四、FBV与CBV

django的视图层由两种形式构成:FBV和CBV

我们之前介绍的一直都是FBV

FBV(Function base view):基于函数的视图

CBV(Class base view):基于类的视图

    # CBV路由
    url(r^login/,views.MyLogin.as_view())


        from django.views import View


        class MyLogin(View):
        def get(self,request):
        return render(request,form.html)

        def post(self,request):
        return HttpResponse(post方法)

 

以上是关于62.Django05——视图层的主要内容,如果未能解决你的问题,请参考以下文章

62django之MTV模型(urls,view)

微信小程序视图层WXML_模板

片段中的网格视图

如何从片段内的列表视图打开链接网址?

viewpager 中的片段,未找到视图错误

django登录页面优化