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

news2024/11/16 3:29:09

文章目录

  • 写在前面
  • Django简介
  • 主要程序
  • 运行结果
  • 系列文章
  • 写在后面

写在前面

本期内容

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

所需环境

  • python
  • pycharm或vscode
  • django

下载地址

  • https://download.csdn.net/download/m0_68111267/88795604

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_nameverbose_name_plural:设置单数和复数形式的模型名称,在后台展示时使用。
    • get_latest_by:指定获取最新文章时依据的字段,这里是 ‘create_date’。
  7. 定义 get_absolute_url 方法,返回文章详情页的 URL,通过传递文章ID给路由 ‘blog:article_detail’ 来实现。

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

运行结果

运行结果1
运行结果2

系列文章

序号目录直达链接
1入门实战丨基于Tkinter的简易计算器https://want595.blog.csdn.net/article/details/131731173
2入门实战丨基于Tkinter的生日管理系统https://want595.blog.csdn.net/article/details/131731380
3数据库实战丨基于Tkinter+MySQL的学生成绩管理系统https://want595.blog.csdn.net/article/details/130992721
4数据库实战丨基于Tkinter+MySQL的梅西生涯数据管理系统https://want595.blog.csdn.net/article/details/130995564
5Web实战丨基于Django与Bootstrap的在线计算器https://want595.blog.csdn.net/article/details/134424381
6Web实战丨基于django+html+css的在线购物商城https://want595.blog.csdn.net/article/details/135466052
7Web实战丨基于django+html+css+js的电子商务网站https://want595.blog.csdn.net/article/details/135506809
8Web实战丨基于Django与HTML的用户登录验证系统https://want595.blog.csdn.net/article/details/135513413
9Web实战丨基于django+html+css+js的学院门户网站https://want595.blog.csdn.net/article/details/135511066
10Web实战丨基于Django与HTML的新闻发布系统https://want595.blog.csdn.net/article/details/135519824
11Web实战丨基于django+html+css+js的在线博客网站https://want595.blog.csdn.net/article/details/135536765
12……

写在后面

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1420928.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

prism 10 for Mac v10.1.1.270激活版 医学绘图分析软件

GraphPad Prism 10 for Mac是一款专为科研工作者和数据分析师设计的绘图和数据可视化软件。以下是该软件的一些主要功能: 软件下载:prism 10 for Mac v10.1.1.270激活版 数据整理和导入:GraphPad Prism 10支持从多种数据源导入数据&#xff0…

设计与实现基于Java+MySQL的考勤发布-签到系统

课题背景 随着现代经济的迅速发展,电子考勤签到服务已经渗透到人们生活的方方面面,成为不可或缺的一项服务。在这个背景下,线上签到作为考勤签到的一种创新形式,为用户提供了便捷的操作方式,使得任务签到、个人签到记…

神经调节的Hebbian学习用于完全测试时自适应

摘要 完全测试时自适应(Fully test-time adaptation)是指在推理阶段对输入样本进行序列分析,从而对网络模型进行自适应,以解决深度神经网络的跨域性能退化问题。我们从生物学合理性学习中获得灵感,其中神经元反应是基…

【HarmonyOS应用开发】UIAbility实践第一部分(五)

一、UIAbility概述 1、UIAbility是一种包含用户界面的应用组件,主要用于和用户进行交互。UIAbility也是系统调度的单元,为应用提供窗口在其中绘制界面。 2、每一个UIAbility实例,都对应于一个最近任务列表中的任务。 3、一个应用可以有一个UI…

【学网攻】 第(14)节 -- 动态路由(EIGRP)

系列文章目录 目录 系列文章目录 文章目录 前言 一、动态路由EIGRP是什么? 二、实验 1.引入 实验步骤 实验拓扑图 实验配置 看到D开头是便是我们的EIGRP动态路由 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学…

公司宣传电子画册的制作方法

​制作公司宣传电子画册是一种非常有效的方式,可以展示公司的形象和产品,同时也可以吸引更多的潜在客户。不仅低碳环保,还省了不少人力和财力,只要一个二维码、一个链接就能随时随地访问公司的宣传画册。以下是一些制作电子画册的…

【vue】vue.config.js里面获取本机ip:

文章目录 一、效果:二、实现: 一、效果: 二、实现: const os require(os);function getLocalIpAddress() {const interfaces os.networkInterfaces();for (let key in interfaces) {const iface interfaces[key];for (let i …

对鸢尾花进行分类预测-----pycharm

项目说明 #项目: 对鸢尾花进行分类预测 #实例数量150个(3类各50个) #属性数量:4(数值型,数值型,帮助预测的属性和类) #特征:花萼长度,花萼宽度,花瓣长度,花瓣宽度 单位&#xff1…

C#需要学到什么程度才能做MES系统开发工作?

C#需要学到什么程度才能做MES系统开发工作? 在开始前我分享下我的经历,刚入行时遇到一个好公司和师父,给了我机会,两年时间从3k薪资涨到18k的, 我师父给了一些C#学习方法和资料,让我不断提升自己&#xff…

读书人必须知道的9个搜书引擎

各位小伙伴大家好,众所周知,现在找资源的难度要比以前高的多,各种网站封的封删的删,但大家对书籍资源的需求却越来越大。那今天我镜像哥就决定整一期电子书资源狠活儿。 这些资源都是我辛苦收集,并逐一验证筛选出来的的…

1分钟内生成美妙歌曲:Suno AI的音乐魔法

1分钟内生成美妙歌曲:Suno AI的音乐魔法 Suno AI是一款人工智能工具,让创作者能够生成超现实的音乐、语音和音效,可以根据用户的指令生成音乐、语音和其他音频内容。它可以帮助创作者快速生成高质量的音乐作品,并且可以根据不同的…

全国网络安全行业职业技能大赛WP

word_sercet 文档被加密 查看图片的属性 在备注可以看到解压密码 解密成功 在选项里面把隐藏的文本显示出来 可以看到ffag easy_encode 得到一个bmp二维码 使用qr research 得到的密文直接放瑞士军刀 base32解码base64解码hex解码 dir_pcap 直接搜索flag 发现flag…

【lesson2】定长内存池的实现

文章目录 介绍定长内存池的设计定长内存池的实现需要成员变量需要的成员函数定长内存池结构定长内存池Delete(释放空间)的实现定长内存池New(申请空间)的实现 定长内存池的实现完整版 介绍 作为程序员(C/C)我们知道申请内存使用的…

C++ Qt开发:运用QJSON模块解析数据

Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QJson组件的实现对JSON文本的灵活解析…

vue 使用echarts-gl实现3d旋转地图

之前也有使用过echarts开发项目中涉及到的地图功能,当时使用geo来实现地图轮廓,看上去有种3d的感觉。最近闲来无事看了一份可视化大屏的UI设计图,感觉3d旋转地图挺好玩的,今天就来尝试实现下。 首先安装下echarts和echarts-gl依赖…

WebGL开发艺术和创意项目

WebGL提供了强大的图形渲染能力,可以用于开发各种艺术和创意项目。以下是一些使用WebGL开发艺术和创意项目的示例,希望对大家有所帮助。 1.交互式艺术品: 利用WebGL,可以创建具有交互性的艺术品。用户可以与艺术品进行互动、探索和…

正则表达式 文本三剑客

一 正则表达式: 由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能,类似于增强版的通配符功能,但与通配符不同,通配符功能是用…

openGauss学习笔记-210 openGauss 数据库运维-常见故障定位案例-谓词下推引起的查询报错

文章目录 openGauss学习笔记-210 openGauss 数据库运维-常见故障定位案例-谓词下推引起的查询报错210.1 谓词下推引起的查询报错210.1.1 问题现象210.1.2 原因分析210.1.3 处理办法 openGauss学习笔记-210 openGauss 数据库运维-常见故障定位案例-谓词下推引起的查询报错 210.…

这些好用小众的知识库软件,快收藏起来

现代企业和团队日益重视知识管理,寻找能提供精准、高效、简便的知识库应用变得尤其重要。而今天,将带给大家三款小众却倍受好评的知识库软件,如果你是寻找有效的信息管理工具的话,那么以下就是你不能错过的秘密武器了,…

由于系统注册表文件丢失或损坏,因此Windows无法加载,如何解决?

问题描述:windows黑屏未能启动,提示由于系统注册表文件丢失或损坏,因此windows无法加载,错误代码:0xc000014c。出现这种问题的原因大多是因为电脑在使用过程中硬件松动,导致出现这种问题。 解决办法: 1. 如…