django——博客项目(代码片段)

huang-yc huang-yc     2022-12-27     281

关键词:

博客项目

目前的目标是构建一个基于Django的前后端完整的博客系统,首先对项目流程整理如下:

技术分享图片

 

1. 分析需求

1.1. 1.基于用户认证组件和Ajax实现登录验证

1.2. 基于forms组件和Ajax实现注册功能

1.3. 设计系统首页(文章列表渲染)

1.4. 设计个人站点页面

1.5. 文章详情页

1.6. 实现文章点赞功能

1.7. 实现文章的评论

  1.7.1. 文章的评论

  1.7.2. 评论的评论

1.8. 富文本编辑框和防止xss攻击

2. 设计表结构

技术分享图片

 module代码:

技术分享图片
from django.db import models

# Create your models here.


from django.contrib.auth.models import AbstractUser


class UserInfo(AbstractUser):
    """
    用户信息
    """
    nid = models.AutoField(primary_key=True)
    telephone = models.CharField(max_length=11, null=True, unique=True)
    avatar = models.FileField(upload_to=avatars/, default="avatars/default.png")
    create_time = models.DateTimeField(verbose_name=创建时间, auto_now_add=True)

    blog = models.OneToOneField(to=Blog, to_field=nid, null=True, on_delete=models.CASCADE)

    def __str__(self):
        return self.username


class Blog(models.Model):
    """
    博客信息
    """
    nid = models.AutoField(primary_key=True)
    title = models.CharField(verbose_name=个人博客标题, max_length=64)
    site_name = models.CharField(verbose_name=站点名称, max_length=64)
    theme = models.CharField(verbose_name=博客主题, max_length=32)

    def __str__(self):
        return self.title


class Category(models.Model):
    """
    博主个人文章分类表
    """
    nid = models.AutoField(primary_key=True)
    title = models.CharField(verbose_name=分类标题, max_length=32)
    blog = models.ForeignKey(verbose_name=所属博客, to=Blog, to_field=nid, on_delete=models.CASCADE)

    def __str__(self):
        return self.title


class Tag(models.Model):
    nid = models.AutoField(primary_key=True)
    title = models.CharField(verbose_name=标签名称, max_length=32)
    blog = models.ForeignKey(verbose_name=所属博客, to=Blog, to_field=nid, on_delete=models.CASCADE)

    def __str__(self):
        return self.title


class Article(models.Model):
    nid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=50, verbose_name=文章标题)
    desc = models.CharField(max_length=255, verbose_name=文章描述)
    create_time = models.DateTimeField(verbose_name=创建时间, auto_now_add=True)
    content = models.TextField()

    comment_count = models.IntegerField(default=0)
    up_count = models.IntegerField(default=0)
    down_count = models.IntegerField(default=0)

    user = models.ForeignKey(verbose_name=作者, to=UserInfo, to_field=nid, on_delete=models.CASCADE)
    category = models.ForeignKey(to=Category, to_field=nid, null=True, on_delete=models.CASCADE)
    tags = models.ManyToManyField(
        to="Tag",
        through=Article2Tag,
        through_fields=(article, tag),
    )

    def __str__(self):
        return self.title


class Article2Tag(models.Model):
    nid = models.AutoField(primary_key=True)
    article = models.ForeignKey(verbose_name=文章, to="Article", to_field=nid, on_delete=models.CASCADE)
    tag = models.ForeignKey(verbose_name=标签, to="Tag", to_field=nid, on_delete=models.CASCADE)

    class Meta:
        unique_together = [
            (article, tag),
        ]

    def __str__(self):
        v = self.article.title + "---" + self.tag.title
        return v


class ArticleUpDown(models.Model):
    """
    点赞表
    """

    nid = models.AutoField(primary_key=True)
    user = models.ForeignKey(UserInfo, null=True, on_delete=models.CASCADE)
    article = models.ForeignKey("Article", null=True, on_delete=models.CASCADE)
    is_up = models.BooleanField(default=True)

    class Meta:
        unique_together = [
            (article, user),
        ]


class Comment(models.Model):
    """

    评论表

    """
    nid = models.AutoField(primary_key=True)
    article = models.ForeignKey(verbose_name=评论文章, to=Article, to_field=nid, on_delete=models.CASCADE)
    user = models.ForeignKey(verbose_name=评论者, to=UserInfo, to_field=nid, on_delete=models.CASCADE)
    content = models.CharField(verbose_name=评论内容, max_length=255)
    create_time = models.DateTimeField(verbose_name=创建时间, auto_now_add=True)
    parent_comment = models.ForeignKey(self, null=True, on_delete=models.CASCADE)

    def __str__(self):
        return self.content
View Code

 

  1. 用户信息表
  2. 博客信息表
  3. 博主个人文章分类表
  4. 博主个人文章标签表
  5. 博文表
  6. 文章标签关联表
  7. 点赞表
  8. 评论表 

3. 功能开发

4. 功能测试

5. 项目部署上线

django---博客项目实战(代码片段)

  1.urlsfromdjango.conf.urlsimporturlfromdjango.contribimportadminfromblogimportviewsurlpatterns=[url(r‘^admin/‘,admin.site.urls),url(r‘^login/‘,views.login),url(r‘^get_valid_code/‘,views.ge 查看详情

django学习---多人博客项目(代码片段)

Django学习---多人博客项目(2)?上一部分内容完成了博客项目的搭建,以及博客标题和博客内容的展示,熟悉了Django的使用,下面,接着实现用户管理部分功能。一、自定义模板和静态文件的位置(1)自定义模板的位置BASE_DIR=os.... 查看详情

django博客开发-数据建模与样式设定(代码片段)

开发流程介绍之前Django的学习过程当中已经把基本Django开发学完了,现在以Django的博客项目完成一遍课程的回顾和总结。同时来一次完整开发的Django体验。一个产品从研究到编码我们要经历以下的过程:博客开发需求分析与建模... 查看详情

django系列博客(代码片段)

Django系列博客(二)前言今天博客的内容为使用Django完成第一个Django页面,并进行一些简单页面的搭建和转跳。命令行搭建Django项目创建纯净虚拟环境在上一篇博客中已经安装好了虚拟环境,所以用虚拟环境来安装指定版本的Dja... 查看详情

2-建立django博客应用(代码片段)

建立博客应用我们已经建立了Django博客的项目工程,并且成功地运行了它。不过到目前为止这一切都还只是Django为我们创建的项目初始内容,Django不可能为我们初始化生成博客代码,这些功能性代码都得由我们自己编... 查看详情

django框架之bbs项目之个人博客页面(代码片段)

内容回顾:     首先我们来回顾一下ORM的分组和聚合    https://www.cnblogs.com/liwenzhou/p/8660826.html  上一步实现了博客园的页面展示,今天我们实现个人博客页面的展示当我们进入个人的博客园的时候,... 查看详情

前后端分离——博客项目(代码片段)

   1初始化django博客项目步骤:创建新虚拟环境,安装各种包:$mkvirtualenvxinjian$cdxinjian/$pipinstalldjango==1.11.8$pythonsteup.pyinstall$pipinstallPyJWT.whl$django-adminstartprojectblog_server 2更改settings.py设置:ALLOWED_HOSTS=[‘*‘]MIDDLEWARE=[... 查看详情

基于django的个人博客网站建立(代码片段)

基于django的个人博客网站建立(六)前言今天主要完成的是项目在腾讯云服务器上ubuntu16.04+django+mysql+uwsig+nginx的部署过程主要内容按照步骤一步一步说1.python环境的安装与pip的安装这里没有采用虚拟环境,是把项目直接运行的,... 查看详情

[技术博客]使用pylint实现django项目的代码风格检查(代码片段)

使用pylint实现django项目的代码风格检查前言? 一个项目大多都是由一个团队来完成,如果没有统一的代码规范,那么每个人的代码的风格必定会有很大的差别。且不说会存在多个人同时开发同一模块的情况,即使是分工十分明晰... 查看详情

用html页面模板使用django完成个人博客(代码片段)

...: workon虚拟环境名 2、找到我们的项目管理文件夹django,进入创建项目django-adminstartprojectblog3、进入到我们的项目文件夹当中,创建我们的第一个应用pythonmanage.pystartappuser 用于用户管理              ... 查看详情

项目实战基于python+django+mysql的个人博客系统(附完整源码)(代码片段)

基于python+Django+Mysql的个人博客系统项目实战1、项目说明基于python+Django+Mysql的个人博客系统项目实战项目需要安装pycharm专业版以及MySQL环境(环境搭建和破解可以看我的B站里的视频有讲解)首先需要创建数据库数据库名字叫做db... 查看详情

从0开发一个django博客系统(代码片段)

目录一、项目准备1.1项目分析1.2工程创建和配置二、注册2.2定义用户模型类2.3图形验证码2.4短信验证码2.5用户注册实现2.6展示首页2.7状态保持三、登录3.1手机登录3.2首页用户名展示3.3退出登录四、忘记密码五、用户中心5.2用户中... 查看详情

django搭建个人博客系列:环境准备及简单的博客系统搭建(代码片段)

之前的Linux环境准备工作,可以参考我之前的博客在Win10下利用VMware安装Ubuntu20.04教程。下面开始构建虚拟环境,以后写多个项目防止污染其他项目环境。1.创建虚拟环境#安装Pythonvenv库sudoapt-getinstallpython3-venv#创建虚拟环境mkdirenvcd... 查看详情

[技术博客]使用pylint实现django项目的代码风格检查(代码片段)

使用pylint实现django项目的代码风格检查前言? 一个项目大多都是由一个团队来完成,如果没有统一的代码规范,那么每个人的代码的风格必定会有很大的差别。且不说会存在多个人同时开发同一模块的情况,即使是分工十分明晰... 查看详情

项目-博客园(代码片段)

...使用更抽象类,就要继承AbstractUser。抽象类有很多好处,django内部封装了很多方法可以直接操作数据,很方便。fromdjango.dbimportmodels#Createyourmodelshere.fromdjango.contrib.auth.mode 查看详情

django之bbs博客项目(代码片段)

一、登陆功能(验证码)1fromgeetestimportGeetestLib2fromdjango.contribimportauth34#使用极验滑动验证码的登陆5deflogin(request):6ifrequest.method=="POST":7#初始化一个返回给ajax的字典8ret="status":0,"msg":""9#从提交的数据中获取用户名和密码10username=reque... 查看详情

10.1博客项目1.4(代码片段)

2018-10-114:32:24Django必会图!!  在python和js中的 就json接口 Ajax参考连接 :  http://www.cnblogs.com/yuanchenqi/articles/7638956.html jsonDemoimportjsoninfo="name":‘alex‘#re 查看详情

技术博客django中文件下载的实现(代码片段)

...的经验是有必要记录下来的,因此就有了【技术博客】。Django中文件下载的实现1、背景在VisualPytorch项目中,当时需要提供一个文件下载的功能。最初想到的方案主要有一下三种直接把网页前端的字符串写入文件中,在客户端完... 查看详情