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方法')

猜你喜欢

转载自www.cnblogs.com/heirenxilou/p/12975017.html