Django的CVB实例详解

Django的CBV实例详解是一个用来展示Django中Class-Based Views(CBV)的实际应用的教程。本教程包含两条示例,本文将详细讲解这两个示例的实现过程。

示例一

第一个示例是一个简单的博客应用,包含文章发布、修改、删除以及文章列表和详细页面。我们首先创建一个Django项目,创建一个名为blog的应用。

$ django-admin startproject mysite
$ cd mysite
$ python manage.py startapp blog

然后我们创建一个名为Article的模型,包含文章的标题、正文和发布时间等字段。

# blog/models.py
from django.db import models

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    pub_time = models.DateTimeField(auto_now_add=True)

    def __str__(self):
        return self.title

接下来我们定义Article的列表和详细视图,ArticleListView显示所有的文章列表,ArticleDetailView显示单篇文章的详细页面。

# blog/views.py
from django.views.generic import ListView, DetailView
from .models import Article

class ArticleListView(ListView):
    model = Article
    template_name = 'blog/article_list.html'

class ArticleDetailView(DetailView):
    model = Article
    template_name = 'blog/article_detail.html'

这里使用了Django提供的ListViewDetailView视图,与常规的函数视图不同,这些视图类采用了面向对象的编程方式,具有很高的可复用性。

最后,我们需要在blog/urls.py文件中定义路由,以便能够访问文章列表和详细页面的视图。

# blog/urls.py
from django.urls import path
from .views import ArticleListView, ArticleDetailView

urlpatterns = [
    path('', ArticleListView.as_view(), name='article_list'),
    path('<int:pk>/', ArticleDetailView.as_view(), name='article_detail'),
]

这里使用path()函数来定义路由,<int:pk>表示文章的id,将被传递到ArticleDetailView中的pk参数中。

示例二

第二个示例是一个简单的在线购物网站,包含商品列表和商品详情页面。和第一个示例类似,我们也是首先创建一个Django项目,并创建一个名为shop的应用。

$ django-admin startproject mysite
$ cd mysite
$ python manage.py startapp shop

接下来,我们定义一个名为Product的模型,包含商品名称、价格、描述等字段。

# shop/models.py
from django.db import models

class Product(models.Model):
    name = models.CharField(max_length=100)
    price = models.FloatField()
    description = models.TextField()

    def __str__(self):
        return self.name

然后,我们创建一个名为ProductListView的视图,并重写get_context_data()方法,以便将数据库中的所有商品传递给模板。

# shop/views.py
from django.views.generic import ListView
from .models import Product

class ProductListView(ListView):
    model = Product
    template_name = 'shop/product_list.html'

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['products'] = Product.objects.all()
        return context

在模板中,我们使用{% for %}模板标签来遍历所有的商品,并展示名称、价格和描述信息。

<!-- shop/product_list.html -->
{% extends 'base.html' %}

{% block content %}
  <h1>Products</h1>
  <ul>
    {% for product in products %}
      <li>
        <h2>{{ product.name }}</h2>
        <p>${{ product.price }}</p>
        <p>{{ product.description }}</p>
      </li>
    {% endfor %}
  </ul>
{% endblock %}

最后,我们需要在shop/urls.py文件中定义路由,以便能够访问商品列表和详细页面的视图。

# shop/urls.py
from django.urls import path
from .views import ProductListView

urlpatterns = [
    path('', ProductListView.as_view(), name='product_list'),
]

这里同样使用path()函数来定义路由,''表示访问根路由时,将显示商品列表页面。

通过上述两个示例,我们可以了解到Django中Class-Based Views(CBV)的基本用法,以及相关模型、视图和路由的实现方法。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django的CVB实例详解 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Django框架(二十八)—— Django缓存机制

    一、什么是缓存 动态网站中,用户请求都要去服务器的数据库中增删改查,会消耗很大的资源,因此,使用缓存在减轻服务器的压力。 缓存是将一些常用的数据保存内存或者memcache中,在一定的时间内有人来访问这些数据时,则不再去执行数据库及渲染等操作,而是直接从内存或memcache的缓存中去取得数据,然后返回给用户。 二、Django的6中缓存方式及配置(只需要改…

    Django 2023年4月10日
    00
  • Django REST Framework 序列化和校验 知识点

      DRF序列化   Django ORM对象 –> JSON格式的数据  序列化   JSON格式的数据 –> Django ORM数据  反序列化   需要两个工具: from rest_framework.serializers import Serializer from rest_framework.serializers impo…

    Django 2023年4月13日
    00
  • django数据库动态添加列

      方法一:  python manage.py migrate       方法二:  python manage.py migrate         效果: —〉  

    Django 2023年4月12日
    00
  • Python——Django-__init__.py的内容

    一、告诉Django用pymysql来代替默认的MySQLdb(在__init__.py里) import pymysql #告诉Django用pymysql来代替默认的MySQLdb pymysql.install_as_MySQLdb()  

    Django 2023年4月10日
    00
  • Django+boostrap 美化admin后台的操作

    针对这个主题,我可以提供以下的完整攻略。 步骤一:安装和配置Django 首先,你需要安装 Django 并配置基本设置,这里提供一个示例: 在终端中通过 pip 安装 Django:pip install django。 创建一个新的 Django 项目:django-admin startproject myproject,其中 myproject 是你…

    Django 2023年5月16日
    00
  • linux Vue+nginx+django 实现前后端分离

    示例项目 — LuffyCity.com 的上线 具体解释,vue前端提供静态页面,且可以向后台发起get,post等restful请求 django后台提供数据支撑,返回json数据,返回给vue,进行数据页面渲染 下面是部署笔记: — 先从后端搞起 解决环境依赖 — 解决环境依赖的办法: 1 挨个报错的处理 2 pip3 freeze >re…

    Django 2023年4月12日
    00
  • django模板结构优化的方法

    当一个 Django 项目中的模板文件变得越来越多,结构越来越复杂时,优化模板结构变得尤为重要。下面是 Django 模板结构优化的方法。 1. 组织模板文件夹 将模板文件按照功能或模块划分到不同的文件夹中,让整个模板文件夹保留良好的结构和层次,使得模板文件在维护和更新时更加方便。例如,可以按照视图的功能划分文件夹,或者按照页面的类型划分文件夹: templ…

    Django 2023年5月16日
    00
  • django 与 vue 的完美结合 以及NodeJS与Django协同应用开发

    django 与 vue 的完美结合 实现前后端的分离开发之后在整合 用django后端,前端用vue,做一个普通的简单系统,我就是一搞后端的,听到vue也是比较震惊,之前压根没接触过vue. 看了vue的一些文档,还有一些项目,先说一下django与vue的完美结合吧! 首先是创建一个django项目  django-admin startproject …

    Django 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部