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

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

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

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

一、定义类视图

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关键字参数来指定响应状态码

相关文章
|
4天前
|
XML JSON 前端开发
Django视图函数技巧,从入门到实战
Django视图函数技巧,从入门到实战
|
5天前
|
运维 监控 Serverless
Serverless 应用引擎产品使用之阿里函数计算中在自定义环境下用debian10运行django,用官方层的python3.9,配置好环境变量后发现自定义层的django找不到了如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
14 3
|
16天前
|
Python
基于Django的Python应用—学习笔记—功能完善
基于Django的Python应用—学习笔记—功能完善
|
16天前
|
存储 数据库 数据安全/隐私保护
基于Django的Python应用——学习笔记
基于Django的Python应用——学习笔记
|
16天前
|
API 数据库 数据安全/隐私保护
基于Django的python小应用——投票
基于Django的python小应用——投票
|
18天前
|
消息中间件 监控 数据库
Django的异步任务处理:提升应用响应速度与性能
【4月更文挑战第15天】Django通过集成Celery实现异步任务处理,提升Web应用性能和响应速度。异步处理用于耗时操作如数据库操作、邮件发送。基本步骤包括安装配置Celery、创建任务、在视图中调用任务并启动worker。应用场景包括发送通知、处理复杂逻辑和数据导入导出。注意任务原子性、优先级设置和任务执行监控。
|
18天前
|
开发者 Python
Django的信号机制:实现应用间的通信与响应
【4月更文挑战第15天】Django信号机制实现跨组件通信,基于订阅/发布模式,允许在事件(如模型保存、删除)发生时触发自定义函数。内置信号如`pre_save`、`post_save`,也可自定义信号。使用包括定义信号、连接处理器和触发信号。常用于模型操作监听、第三方应用集成和跨应用通信。注意避免滥用和保证处理器健壮性。信号机制提升代码可维护性和扩展性。
|
18天前
|
自然语言处理 中间件 开发者
Django的国际化与本地化支持:打造多语言应用
【4月更文挑战第15天】Django,一款强大的Web框架,内置出色的支持国际化和本地化功能,使得创建多语言应用变得简单。本文介绍了国际化(i18n)与本地化(l10n)的概念,阐述了Django的相应机制,包括标记可翻译字符串、提取与翻译、设置语言和地区、本地化格式处理。遵循文中步骤,开发者能有效构建适应不同语言和地区需求的Web应用,提升用户体验。
|
18天前
|
中间件 API 文件存储
Django的扩展包与中间件:增强应用功能的利器
【4月更文挑战第15天】本文介绍了Django的扩展包和中间件,两者用于增强Django应用功能。扩展包是可重用的应用,提供额外功能,如用户认证和API开发。选择合适的扩展包,通过安装、配置,可轻松集成到项目中。中间件则在请求和响应之间执行操作,如身份验证和权限控制。创建中间件类并添加到settings.py中,实现特定功能。扩展包和中间件常结合使用,以实现更复杂的应用需求,提高开发效率和应用性能。
|
18天前
|
缓存 API 数据库
Django中的视图装饰器:扩展视图功能的利器
【4月更文挑战第15天】Django视图装饰器用于扩展视图功能,如权限验证、缓存控制和日志记录。它们是Python的高级特性,能不修改原始函数代码就添加新功能。Django提供内置装饰器,如`@login_required`(强制用户登录)、`@cache_page`(缓存视图输出)和`@csrf_protect`(CSRF保护)。同时,开发者可自定义装饰器,例如上面的`timing_decorator`用于记录视图执行时间。使用装饰器时要注意性能影响、执行顺序和参数处理。装饰器增强了代码复用性和可维护性。