0

0

Django 基于类的视图变得简单

心靈之曲

心靈之曲

发布时间:2024-10-12 22:49:04

|

566人浏览过

|

来源于dev.to

转载

django 基于类的视图变得简单

众所周知,django 在开发 web 应用程序时使用 mvt(模型-视图-模板)进行设计。

view 本身是一个可调用的对象,它接受请求并返回响应。它不仅仅是一个函数,因为 django 提供了一种称为“基于类的视图”的东西,因此开发人员可以使用基于类的方法或者您可以说 oop 方法来编写视图。这个基于类的视图的设计使我们可以构建我们的视图,并可以通过继承和混合的力量重用。

正如 django 文档中详细记录的那样,基于函数的视图的问题之一是无法扩展或自定义它们超出某些配置选项,从而限制了它们在许多实际应用程序中的有用性。

django 中的基类和 mixins 工具包旨在实现最大的灵活性。让我们看看如何使用 view 类继承在 django 中使用最基本的基于类的视图,并将其与基于函数的视图进行比较。

#views.py using view class inheritance
from django.views import view
from django.http import httpresponse, httprequest

class indexview(view):
    def get(self, request: httprequest):
        # imagine 10 line of view logic here
        return httpresponse("hello world from indexview")

    def post(self, request: httprequest):
        # imagine 10 line of view logic here
        return httpresponse("hello world from indexview in post method")

#views.py function based view
from django.http import httpresponse, httprequest

def index(request: httprequest):
    if request.method == "get":
        # imagine 10 line of view logic here
        return httpresponse("hello world from index funcion view")
    elif request.method == "post":
        # imagine 10 line of view logic here
        return httpresponse("hello world from index funcion view in post method")

如果您查看上面的内容,基于类的视图允许您使用不同的类实例方法响应不同的 http 请求方法,而不是在单个视图函数内使用条件分支代码。现在想象一下,在上面的每个视图中,我们为每个方法添加了 10 行逻辑,您应该可以看出哪一个更容易演练。

图酷AI
图酷AI

下载即用!可以免费使用的AI图像处理工具,致力于为用户提供最先进的AI图像处理技术,让图像编辑变得简单高效。

下载

为了将基于类的视图注册到 url 配置中,我们必须调用 as_view() 类方法,该方法基本上将类视图转换为可调用函数。这个转换后的函数将调用setup()来初始化其属性,然后调用dispatch()来检查用户有哪些方法(get、post或其他方法),并将请求方法连接到基于类的视图最初具有的相应匹配方法

#urls.py

from django.urls import path
from myapp.views import indexview, index

urlpatterns = [
    path("", indexview.as_view(), name=indexview.__name__), 
    path("index/", index, name=index.__name__),

]

基于类的视图还支持 django 所有的 http 快捷方式,例如 render() 函数来渲染模板,这里是 django cbv 使用 render 快捷方式并与 django 消息框架配合的修改示例

class IndexView(View):
    def get(self, request: HttpRequest):
        # imagine 10 line of view logic here
        return render(request, "GEtindex.html")

    def post(self, request: HttpRequest):
        # imagine 10 line of view logic here
        messages.add_message(request, messages.INFO, "POST Success") #add display success message here by django messages framework
        return render(request, "POSTindex.html")

总体而言,基于 django 类的视图允许开发人员更好地编写来理解视图逻辑,视图逻辑越复杂,我很确定如果我们只使用基于函数的视图,阅读起来会更加困难(太多的 if 语句来检查什么)方法是用户使用的示例)并且难以扩展,同时 django cbv 旨在将我们的视图逻辑分解为多种方法,例如 get 和 post 方法。如果你愿意的话,可以在继承中再次使用,尽管我可以说,我们在一个类中拥有的继承越多,由于它的抽象性,它就越难以阅读。

你可以在 django 文档中查看更多关于基于类的视图,从这里开始,这里,这里

还有一个很好的替代文档,专注于基于 django 类的视图是 ccbv.co.uk

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

713

2023.08.22

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

713

2023.08.22

http500解决方法
http500解决方法

http500解决方法有检查服务器日志、检查代码错误、检查服务器配置、检查文件和目录权限、检查资源不足、更新软件版本、重启服务器或寻求专业帮助等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

283

2023.11.09

http请求415错误怎么解决
http请求415错误怎么解决

解决方法:1、检查请求头中的Content-Type;2、检查请求体中的数据格式;3、使用适当的编码格式;4、使用适当的请求方法;5、检查服务器端的支持情况。更多http请求415错误怎么解决的相关内容,可以阅读下面的文章。

389

2023.11.14

HTTP 503错误解决方法
HTTP 503错误解决方法

HTTP 503错误表示服务器暂时无法处理请求。想了解更多http错误代码的相关内容,可以阅读本专题下面的文章。

1224

2024.03.12

http与https有哪些区别
http与https有哪些区别

http与https的区别:1、协议安全性;2、连接方式;3、证书管理;4、连接状态;5、端口号;6、资源消耗;7、兼容性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

1770

2024.08.16

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

150

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

88

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

90

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号