Django基础核心技术介绍(3): 视图View的编写及如何使用通用视图(Generic View)

本文介绍了Django视图的基础知识,包括视图在MVC模式中的作用,以及如何编写自定义视图。重点讲解了如何使用通用视图,如ListView、DetailView、CreateView、UpdateView和DeleteView,以及它们的默认行为和自定义方法,帮助开发者简化Django Web应用的开发过程。
摘要由CSDN通过智能技术生成

Django网络应用开发的5项基础核心技术包括模型(Model)的设计URL的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。今天小编我就来拼个老命给你来介绍下第三项Django核心基础知识之View视图的编写吧, 并详细介绍下如何自定义使用Django自带的通用视图。想持续了解后续Django Web开发技术请订阅我的公众号【Python与Django大咖之路】。

 

什么是View视图? Django的View是如何工作的

 

Django的Web开发也遵循经典软件设计开发的MVC模式。View (视图) 主要根据用户的请求返回数据,用来展示用户可以看到的内容(比如网页,图片),也可以用来处理用户提交的数据,比如保存到数据库中。Django的视图(View)通常和URL路由一起工作的。服务器在收到用户通过浏览器发来的请求后,会根据urls.py里的关系条目,去视图View里查找到与请求对应的处理方法,从而返回给客户端http页面数据。

 

我们先看一个最简单的视图View。当用户发来一个请求request时,我们通过HttpResponse打印出Hello, World!

# views.py
from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello, World!")

 

这个例子过于简单。在实际Web开发过程中,我们的View不仅要负责从数据库提取数据,还需要指定显示内容的模板,并提供模板渲染页面所需的内容对象(context object)。

 

我们再来看看下面一个新闻博客的例子。/blog/展示所有博客文章列表。/blog/article/<int:id>/展示一篇文章的详细内容。

# blog/urls.py
from django.urls import path

from . import views

urlpatterns = [
    path('blog/', views.index, name='index'),
   path('blog/article/<int:id>/', views.article_detail, name='article_detail'),
]


# blog/views.py
from django.shortcuts import render, get_object_or_404
from .models import Article


# 展示所有文章
def index(request):
    latest_articles = Article.objects.all().order_by('-pub_date')
    return render(request, 'blog/article_list.html', {"latest_articles": latest_articles})


# 展示所有文章
def article_detail(request, id):
    article = get_object_or_404(Article, pk=id)
    return render(request, 'blog/article_detail.html', {"article": article})

 

那么这段代码是如何工作的?
  • 当用户在浏览器输入/blog/时,URL收到请求后会调用视图views.py里的index方法,展示所有文章。

  • 当用户在浏览器输入/blog/article/<int:id>/时,URL不仅调用了views.py里的article方法,而且还把参数文章id通过<int:id>括号的形式传递给了视图里的article_detail方法。

  • views.py里的index方法先提取要展示的数据对象列表latest_articles, 然后通过render方法传递给模板blog/article_list.html.。

  • views.py里的article_detail方法先通过get_object_or_404方法和id调取某篇具体的文章对象article,然后通过render方法传递给模板blog/article_detail.html显示。

在本例中,我们使用了views里常用的2个便捷方法render()和get_object_or_404()。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值