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

相关文章
|
1月前
|
前端开发 JavaScript UED
探索Python Django中的WebSocket集成:为前后端分离应用添加实时通信功能
通过在Django项目中集成Channels和WebSocket,我们能够为前后端分离的应用添加实时通信功能,实现诸如在线聊天、实时数据更新等交互式场景。这不仅增强了应用的功能性,也提升了用户体验。随着实时Web应用的日益普及,掌握Django Channels和WebSocket的集成将为开发者开启新的可能性,推动Web应用的发展迈向更高层次的实时性和交互性。
75 1
|
1月前
|
IDE 关系型数据库 MySQL
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
这篇文章是关于如何创建一个Django框架,介绍Django的项目结构和开发逻辑,并指导如何创建应用和编写“Hello, World!”程序的教程。
38 3
Django学习一:创建Django框架,介绍Django的项目结构和开发逻辑。创建应用,编写主包和应用中的helloworld
|
1月前
|
SQL Java 数据库
Django学习三:views业务层中通过models对实体对象进行的增、删、改、查操作。
这篇文章是关于如何使用Django框架的ORM系统在视图(views)层面进行数据库的增、删、改、查操作的教程。
18 0
Django学习三:views业务层中通过models对实体对象进行的增、删、改、查操作。
|
1月前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
61 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
1月前
|
监控 应用服务中间件 网络安全
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
部署Django应用:使用Gunicorn和Nginx构建高效的生产环境
106 0
|
1月前
|
存储 开发框架 JSON
【查漏补缺】Django模型字段类型及其应用
【查漏补缺】Django模型字段类型及其应用
18 0
|
1月前
|
存储 安全 UED
GitHub OAuth认证的Django应用
GitHub OAuth认证的Django应用
22 0
|
2月前
|
数据处理 Python
Django视图:构建动态Web页面的核心技术
Django视图:构建动态Web页面的核心技术
|
3月前
|
C++ Python
Django视图函数VS类视图:如何选择最适合你的开发方式?
【8月更文挑战第31天】本文对比了Django中的函数视图和类视图。函数视图直接处理HTTP请求和响应,灵活且易于维护,适用于简单业务逻辑;类视图基于Python类,提供更丰富的功能和更高的灵活性,适合处理复杂业务逻辑。选择哪种视图取决于具体需求,合理使用两者可帮助你构建高效且易维护的Django应用。
58 0
|
17天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
103 45