Web实战丨基于Django的简单网页计数器

简介: Web实战丨基于Django的简单网页计数器

写在前面

本期内容

  • 基于django的简单网页计数器

所需环境

  • python
  • pycharm或vscode
  • django


Django简介

Django 是一个用 Python 编写的高级、开源 Web 开发框架,以其高效、安全和可扩展性而闻名。该框架遵循模型-视图-模板(Model-View-Template, MVT)设计模式,简化了复杂数据库驱动网站的开发流程。


在 Django 中,模型(Model)负责处理应用程序的数据结构以及与数据库的交互,通过 ORM 提供了一种直观的方式来定义数据库表结构并进行 CURD 操作。


视图(View)是处理用户请求的核心部分,视图函数或类接收请求数据,执行业务逻辑,并决定返回给用户的响应内容。


模板(Template)系统则用于渲染前端界面,允许开发者使用简洁易懂的语法来嵌入变量和逻辑,分离了展示层代码和业务逻辑。


Django 内置了强大的后台管理界面,使得快速构建内容管理系统变得轻而易举。它还提供认证、授权、会话管理、中间件、URL 路由、静态文件处理等众多功能,大大加速了 Web 应用程序的开发速度。


此外,Django 支持 RESTful API 开发,通过 Django Rest Framework 可以轻松构建强大的 API 服务。其安全性高,社区活跃,拥有丰富的第三方库支持,适用于从个人博客到企业级复杂应用的各类项目开发。总之,Django 是一款强大且全面的 Web 开发框架,旨在使开发者能够关注于编写高质量的应用程序,而不是重复造轮子。


主要程序

  • views.py
from django.views.generic import ListView
from django.views.generic import DetailView
from .models import Article


class ArticleDetailView(DetailView):
    model = Article

    def get_object(self, queryset=None):
        obj = super().get_object(queryset=queryset)
        obj.viewed()
        return obj


class ArticleListView(ListView):
    queryset = Article.objects.filter(status='p').order_by('-pub_date')
    paginate_by = 6

……(请下载后查看完整代码)

这段代码定义了两个基于 Django Generic Views 的视图类,用于处理文章列表和文章详情页面的显示:


1.ArticleDetailView 类:


  • 继承自 django.views.generic.DetailView,这是一个用于展示单个模型对象详细信息的视图。


  • model = Article:指定该视图将处理 Article 模型的对象。


  • 重写了 get_object 方法:


  • 使用 super().get_object(queryset=queryset) 调用父类方法获取请求对应的文章对象。
  • 在获取到对象后立即调用 obj.viewed() 方法,这会增加文章的浏览量(views 字段加 1)。
  • 最后返回文章对象。这样每次用户访问文章详情页时,都会触发浏览次数的更新。

2.ArticleListView 类:


  • 继承自 django.views.generic.ListView,用于显示一个包含多个模型对象的列表视图。
  • queryset = Article.objects.filter(status='p').order_by('-pub_date'):设置默认查询集为所有状态为“已发表”(‘p’)的文章,并按照发布时间降序排列。
  • paginate_by = 6:设置了分页功能,每页显示6篇文章。这意味着如果文章数量超过6篇,将会自动创建分页链接以便用户可以翻页查看其他文章。

通过这两个视图,网站可以方便地渲染文章列表页面(按发布时间排序并分页)以及单篇文章的详情页面(同时记录并更新文章的浏览量)。


  • models.py
from django.db import models
from django.contrib.auth.models import User
from django.urls import reverse
from django.utils.timezone import now


class Article(models.Model):

    STATUS_CHOICES = (
        ('d', '草稿'),
        ('p', '发表'),
    )

    title = models.CharField('标题', max_length=200, unique=True)
    slug = models.SlugField('slug', max_length=60)
    body = models.TextField('正文')
    pub_date = models.DateTimeField('发布时间', default= now, null=True)
    create_date = models.DateTimeField('创建时间', auto_now_add=True)
    mod_date = models.DateTimeField('修改时间', auto_now=True)
    status = models.CharField('文章状态', max_length=1, choices=STATUS_CHOICES, default='p')
    views = models.PositiveIntegerField('浏览量', default=0)
    author = models.ForeignKey(User, verbose_name='作者', on_delete=models.CASCADE)
……(请下载后查看完整代码)

这段代码定义了一个名为 Article 的 Django 模型类,用于表示博客文章。下面对各个部分进行详细分析:


1.导入相关模块:


  • 从 django.db.models 导入 models 类,用于定义数据库模型。
  • 从 django.contrib.auth.models 导入 User 类,表示系统中的用户模型,以便在 Article 中引用文章的作者。
  • 从 django.urls 导入 reverse 函数,用于生成 URL 链接。
  • 从 django.utils.timezone 导入 now 函数,获取当前时间。

2.定义 Article 类继承自 models.Model,这是 Django 数据库模型的基本类。


3.STATUS_CHOICES:一个元组列表,用于设置文章状态字段的可选项,包括草稿(draft)和已发表(published)两种状态。


4.字段定义:


  • title: 文章标题,CharField 类型,最大长度为 200 个字符,并要求唯一(unique=True)。
  • slug: slug 字段,通常用于创建 SEO 友好的 URL,SlugField 类型,最大长度为 60 个字符。
  • body: 文章正文,TextField 类型,可以存储大量文本内容。
  • pub_date: 发布日期时间,DateTimeField 类型,默认值为当前时间(now),允许为空(null=True)。
  • create_date: 创建日期时间,DateTimeField 类型,自动设置为对象创建时的时间(auto_now_add=True)。
  • mod_date: 修改日期时间,DateTimeField 类型,自动更新为对象最后一次修改的时间(auto_now=True)。
  • status: 文章状态,CharField 类型,长度为 1,其选择范围由 STATUS_CHOICES 定义,默认值为已发表(‘p’)。
  • views: 文章浏览量,PositiveIntegerField 类型,默认值为 0。
  • author: 文章作者,ForeignKey 类型,关联到 User 模型,当该文章被删除时,会级联删除(on_delete=models.CASCADE)。

5.定义字符串表示方法 __str__,返回文章的标题,方便在管理后台或其他地方显示。


6.Meta 类内定义元信息:


ordering: 指定默认排序方式,按照发布日期降序排列(‘-pub_date’)。

verbose_name 和 verbose_name_plural:设置单数和复数形式的模型名称,在后台展示时使用。

get_latest_by:指定获取最新文章时依据的字段,这里是 ‘create_date’。

7.定义 get_absolute_url 方法,返回文章详情页的 URL,通过传递文章ID给路由 ‘blog:article_detail’ 来实现。


8.定义 viewed 方法,用于增加文章的浏览量。每当调用此方法时,文章的 views 字段加1,并仅更新 views 字段 (update_fields=['views'])。这个方法可以在视图函数中调用,以确保每次访问文章详情页面时更新浏览次数。


运行结果

写在后面

我是一只有趣的兔子,感谢你的喜欢!

目录
相关文章
|
8天前
|
小程序 前端开发 中间件
ThinkPHP 配置跨域请求,使用TP的内置跨域类配置,小程序和web网页跨域请求的区别及格式说明
本文介绍了如何在ThinkPHP框架中配置跨域请求,使用了TP内置的跨域类`\think\middleware\AllowCrossDomain::class`。文章还讨论了小程序和web网页在跨域请求格式上的区别,并提供了解决方案,包括修改跨域中间件源码以支持`Origin`和`token`。此外,还介绍了微信小程序跨域请求的示例和web网页前端发送Axios跨域请求的请求拦截器配置。
ThinkPHP 配置跨域请求,使用TP的内置跨域类配置,小程序和web网页跨域请求的区别及格式说明
|
15天前
|
机器学习/深度学习 算法 TensorFlow
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
交通标志识别系统。本系统使用Python作为主要编程语言,在交通标志图像识别功能实现中,基于TensorFlow搭建卷积神经网络算法模型,通过对收集到的58种常见的交通标志图像作为数据集,进行迭代训练最后得到一个识别精度较高的模型文件,然后保存为本地的h5格式文件。再使用Django开发Web网页端操作界面,实现用户上传一张交通标志图片,识别其名称。
44 6
交通标志识别系统Python+卷积神经网络算法+深度学习人工智能+TensorFlow模型训练+计算机课设项目+Django网页界面
|
27天前
|
前端开发 搜索推荐 算法
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
中草药管理与推荐系统。本系统使用Python作为主要开发语言,前端使用HTML,CSS,BootStrap等技术和框架搭建前端界面,后端使用Django框架处理应用请求,使用Ajax等技术实现前后端的数据通信。实现了一个综合性的中草药管理与推荐平台。具体功能如下: - 系统分为普通用户和管理员两个角色 - 普通用户可以登录,注册、查看物品信息、收藏物品、发布评论、编辑个人信息、柱状图饼状图可视化物品信息、并依据用户注册时选择的标签进行推荐 和 根据用户对物品的评分 使用协同过滤推荐算法进行推荐 - 管理员可以在后台对用户和物品信息进行管理编辑
57 12
中草药管理与推荐系统Python+Django网页界面+推荐算法+计算机课设系统+网站开发
|
6天前
|
JSON Rust 安全
30天拿下Rust之实战Web Server
30天拿下Rust之实战Web Server
26 7
|
8天前
|
JavaScript 前端开发 数据安全/隐私保护
组件库实战 | 教你如何设计Web世界中的表单验证
该文章通过实战演练,教授了如何在Web应用中设计和实现表单验证,包括使用Vue.js处理表单输入的验证逻辑、展示错误信息以及通过插槽和组件间通信来增强表单的功能性和用户体验。
组件库实战 | 教你如何设计Web世界中的表单验证
|
12天前
|
SQL 安全 搜索推荐
Web安全-伪静态网页
Web安全-伪静态网页
17 3
|
11天前
|
缓存 中间件 网络架构
Python Web开发实战:高效利用路由与中间件提升应用性能
在Python Web开发中,路由和中间件是构建高效、可扩展应用的核心组件。路由通过装饰器如`@app.route()`将HTTP请求映射到处理函数;中间件则在请求处理流程中插入自定义逻辑,如日志记录和验证。合理设计路由和中间件能显著提升应用性能和可维护性。本文以Flask为例,详细介绍如何优化路由、避免冲突、使用蓝图管理大型应用,并通过中间件实现缓存、请求验证及异常处理等功能,帮助你构建快速且健壮的Web应用。
11 1
|
21天前
|
数据处理 Python
Django视图:构建动态Web页面的核心技术
Django视图:构建动态Web页面的核心技术
|
2月前
|
开发者 图形学 API
从零起步,深度揭秘:运用Unity引擎及网络编程技术,一步步搭建属于你的实时多人在线对战游戏平台——详尽指南与实战代码解析,带你轻松掌握网络化游戏开发的核心要领与最佳实践路径
【8月更文挑战第31天】构建实时多人对战平台是技术与创意的结合。本文使用成熟的Unity游戏开发引擎,从零开始指导读者搭建简单的实时对战平台。内容涵盖网络架构设计、Unity网络API应用及客户端与服务器通信。首先,创建新项目并选择适合多人游戏的模板,使用推荐的网络传输层。接着,定义基本玩法,如2D多人射击游戏,创建角色预制件并添加Rigidbody2D组件。然后,引入网络身份组件以同步对象状态。通过示例代码展示玩家控制逻辑,包括移动和发射子弹功能。最后,设置服务器端逻辑,处理客户端连接和断开。本文帮助读者掌握构建Unity多人对战平台的核心知识,为进一步开发打下基础。
68 0
|
2月前
|
数据库 开发者 Java
颠覆传统开发:Hibernate与Spring Boot的集成,让你的开发效率飞跃式提升!
【8月更文挑战第31天】在 Java 开发中,Spring Boot 和 Hibernate 已成为许多开发者的首选技术栈。Spring Boot 简化了配置和部署过程,而 Hibernate 则是一个强大的 ORM 框架,用于管理数据库交互。将两者结合使用,可以极大提升开发效率并构建高性能的现代 Java 应用。本文将通过代码示例展示如何在 Spring Boot 项目中集成 Hibernate,并实现基本的数据库操作,包括添加依赖、配置数据源、创建实体类和仓库接口,以及在服务层和控制器中处理 HTTP 请求。这种组合不仅简化了配置,还提供了一套强大的工具来快速开发现代 Java 应用程序。
62 0
下一篇
无影云桌面