【Django学习】(四)子应用改写函数视图为类视图

文章介绍了在Django中如何使用类视图来处理不同的HTTP请求,如GET、POST、PUT、DELETE,并通过render函数渲染模板返回HTML页面,以及使用JsonResponse返回JSON数据。类视图提供了更好的可读性和复用性,同时展示了如何配置模板目录和设置安全模式来确保数据正确返回。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前面我们使用的函数视图来返回接口请求结果,函数视图有一定的局限性:

  • 函数视图:
    • 好理解
    • 代码可读性与复用性都不好
  • 类视图:
    • 可读性与复用性更好
    • 不同的请求方式以不同的方法呈现,结构更清晰

一、定义类视图

1、在子应用的views.py文件中定义类

导入相关模块

from django.http import HttpResponse, JsonResponse
from django.views import View

2、必须继承View父类或者View子类

  • 对应的请求方式对应不同的方法:
    • get请求---->get方法
    • post请求---->post方法
    • put请求---->put方法
    • delete请求---->delete方法
  • 请求方法,第一个参数是类视图对象,第二个参数是请求的HttpRquest对象

class MyView(View):
    def get(self, request):
        return HttpResponse("GET请求")

    def post(self, request):
        return HttpResponse("POST请求")

    def put(self, requst):
        return HttpResponse("PUT请求")

    def patch(self, request):
        return HttpResponse("PATCH请求")

    def delete(self, request):
        return HttpResponse("DELETE请求")

3、添加类视图路由

在子应用的子路由中添加类视图路由

urlpatterns = [
    # path('admin/', admin.site.urls),
    path('index1/', index1),
    re_path('^index2/$', index2),
    #类视图路由的定义,views.类视图.as_view(),as_view必须要加括号,不然后面运行会有报错
    path('index4/',views.MyView.as_view())

 注意:类视图路由的定义,views.类视图.as_view(),as_view必须要加括号,不然后面运行会有报错

调用接口:

二、通过渲染模版 ,来渲染返回数据

1、在项目的根路径中添加templates文件夹(专业版本的pycharm创建Django项目时会自动创建templates文件夹),用来存放html模版

2、在全局配置文件夹中的settings.py的TEMPLATES配置中将templates文件夹的路径添加到DIRS参数中

 说明:

  • DIRS列表中存放的是模版的路径,如果子应用中也有模版的话,也需要将模版文件夹的路径添加到DIRS列表中;
  • 'APP_DIRS': True,意思是允许Django项目进入都子应用去搜索模版

3、在子应用的视图类的视图方法中调用render函数,将制定的模版名作为第二个参数

如果输入渲染模版文件时候没有智能提示,那么我们需要将渲染文件夹标记为模版文件夹。 

 说明:

  • render函数,是将html模版渲染后返回给浏览器
  • 第一个参数是HttpRequest对象,第二个参数是模版名称

index.html模版文件,通过jinja2渲染语法进行填充

 打开网页后的页面展示:

三、通过 JsonResponse方法返回数据

class MyView(View):
    def get(self, request):
        data=[
            {"project_name":"前程带项目",
             "leader":"花生",
             "app_name":"P2P平台项目"},
            {"project_name": "测试开发平台",
             "leader": "高老庄",
             "app_name": "随便平台项目"}
        ]
        return JsonResponse(data,safe=False)

JsonResponse中第一个参数为返回的数据,第二个参数为是否打开安全模式

safe安全模式:当data为字典类型时,安全模式打不打开无所谓;

当data数据为其他类型的时候(比如字符串,嵌套字典的列表等),就要关闭安全模式,设置为safe=False,否则无法通过安全模式导致报错

接口返回为json格式数据

 这样我们就可以做到前后端分离的模式,后端只需要返回json数据给前端展示在不同的端页面上(PC、app、浏览器)

四、通过HttpResponse方法返回json数据

    def post(self, request):

        data_dict={
            "name":"花生",
            "age":18,
            "other":"superman"
        }
        json_str=json.dumps(data_dict,ensure_ascii=False)
        return HttpResponse(json_str,content_type="application/json",status=201)

        视图函数和类视图中的请求方法,一定要返回HttpResponse对象或者子类对象
        a.第一个参数为content,需要传递响应数据(类型为字符串或者字节类型)
        b.可以使用content_type关键字参数来指定响应报文类型(text/html、application/json等等)

        c.可以使用status关键字参数来指定响应状态码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

高老庄里的高小翠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值