如何用django开发一个简易个人Blog,美洲杯赌球

Python学习之路—2018/7/10

如何用django开发一个简易个人Blog,django blog

博客开发项目流程

​ 一般来说,一个项目的开发流程分为:项目需求、设计表结构、功能开发、测试功能、产品上线,本次学习以博客园为蓝本进行开发。

如何用django开发一个简易个人Blog

功能概要:(目前已实现功能)

公共展示部分:

1.网站首页展示已发布的博客记录,包括名称、摘要信息、发布日期、阅读量及评论数。

2.首页文章列表可按照分类筛选。

3.点击标题或阅读全文链接,进入博客阅读页面,展示文章标题、内容及评论内容。

博客后台管理部分:(后台套用了一个叫做ACE的后台模板,改造成了django形式的)

1.管理员登录功能

2.分页展示文章列表,可查看、编辑、删除选中文章,并支持批量删除功能。

3.增加新文章功能,利用百度ueEditor富文本编辑器,支持代码高亮显示功能。

4.支持分类的增、删、改、查功能。

下面是几张截图:

首页文章显示:

开发环境及软件版本:

开发是在windows 7,利用sublime text2编辑器。

采用python2.7.3 django1.7.0 mysql

前端采用bootstrap和一些成熟的jquery插件。

 

开发过程:

1.创建项目及app,规划项目结构

2.设计数据模型,即数据库表及表结构。

3.设计公共展示部分样式,及后台数据与模板视图的展示。

4.改造ACE后台模板,添加文章管理、类别管理功能及登录验证功能。

5.部署到CentOS6.5,部署方式:nginx uwsgi django1.6 mysql

 

每一个步骤都有好多更小更细的知识点,以后的文章会根据每一个大的点进行详细讲解。

 

 

1.项目需求

博客的开发的需求主要有以下几点:

  • 基于auth模块和Ajax实现登录验证
  • 基于forms组件和Ajax实现注册功能
  • 设计博客首页
  • 设计个人站点页面
  • 设计文章详情页面
  • 实现文章点赞功能
  • 实现文章的评论功能,包括对文章的评论以及对文章评论的评论
  • 实现富文本编辑框
  • 防止xss攻击(例如当用户的文章中含有JS代码,其他用户进行访问时浏览器会执行JS代码,大大降低了用户的安全性)

python-django框架制作个简单blog

可以在显示文章的时候显示评论框,用户输入后提交到后台,验证文章和评论是否同一个用户,是就提示不能给自己评论,否就保存该评论并提示成功

2.设计表结构

根据功能分析主要有用户信息表(User)、博客信息表(Blog)、博客文章分类信息表(Sort)、博客文章标签信息表(Tag)、博客文章表(Article)、文章点赞表(Like)、文章评论表(Comment),它们之间的关系如下图所示:

美洲杯赌球 1

用django怎新建一个工作目录

新建一个工程目录:
django-admin.py startproject project_name

在改工程目录下创建一个 应用:
cd project_name

python manage.py startapp jobs

http://www.bkjia.com/Pythonjc/827778.htmlwww.bkjia.comtruehttp://www.bkjia.com/Pythonjc/827778.htmlTechArticle如何用django开发一个简易个人Blog,django blog 如何用django开发一个简易个人Blog 功能概要: (目前已实现功能) 公共展示部分: 1.网站首页...

models.py

from django.db import models
from django.contrib.auth.models import AbstractUser


class User(AbstractUser):
    """
    用户信息表
    """
    uid = models.AutoField(primary_key=True)
    phone = models.CharField(max_length=11, unique=True, null=True)
    avatar = models.FileField(upload_to="avatars/", default="/avatars/default.jpg")
    create_time = models.DateField(verbose_name="创建日期", auto_now_add=True)

    blog = models.OneToOneField(to="Blog", to_field="bid", null=True, on_delete=models.CASCADE)  # 与博客建立一对一关系

    def __str__(self):
        return self.username


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

    def __str__(self):
        return self.site


class Sort(models.Model):
    """
    博客文章分类信息表
    """
    sid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=32, verbose_name="分类标题")

    blog = models.ForeignKey(to="Blog", to_field="bid", on_delete=models.CASCADE)  # 与博客建立一对多关系

    def __str__(self):
        return self.title


class Tag(models.Model):
    """
    博客文章标签信息表
    """
    tid = models.AutoField(primary_key=True)
    name = models.CharField(max_length=32, verbose_name="标签名称")

    blog = models.ForeignKey(to="Blog", to_field="bid", on_delete=models.CASCADE)  # 与博客建立一对多关系

    def __str__(self):
        return self.name


class Article(models.Model):
    """
    博客文章表
    """
    aid = models.AutoField(primary_key=True)
    title = models.CharField(max_length=32, verbose_name="文章标题")
    abstract = models.CharField(max_length=32, verbose_name="文章摘要")
    create_time = models.DateField(verbose_name="创建日期", auto_now_add=True)
    content = models.TextField()

    user = models.ForeignKey(to="User", to_field="uid", verbose_name="作者", on_delete=models.CASCADE)
    sort = models.ForeignKey(to="Sort", to_field="sid", null=True, on_delete=models.CASCADE)
    # 与标签建立多对多关系
    tag = models.ManyToManyField(to="Tag", through="ArticleToTag", through_fields=("article", "tag"))

    def __str__(self):
        return self.title


class ArticleToTag(models.Model):
    aid = models.AutoField(primary_key=True)
    article = models.ForeignKey(to="Article", to_field="title", verbose_name="文章题目", on_delete=models.CASCADE)
    tag = models.ForeignKey(to="Tag", to_field="name", verbose_name="文章标签", on_delete=models.CASCADE)

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


class Like(models.Model):
    """
    文章点赞表
    """
    lid = models.AutoField(primary_key=True)
    user = models.ForeignKey(to="User", to_field="uid", null=True, on_delete=models.CASCADE)
    article = models.ForeignKey(to="Article", to_field="aid", null=True, on_delete=models.CASCADE)
    is_like = models.BooleanField(default=True)


class Comment(models.Model):
    """
    文章评论表
    """
    cid = models.AutoField(primary_key=True)
    user = models.ForeignKey(to="User", to_field="uid", null=True, on_delete=models.CASCADE)
    article = models.ForeignKey(to="Article", to_field="aid", null=True, on_delete=models.CASCADE)
    create_time = models.DateField(verbose_name="创建日期", auto_now_add=True)
    content = models.CharField(max_length=255, verbose_name="评论内容")

    parent_comment = models.ForeignKey(to="Comment", to_field="cid", null=True, on_delete=models.CASCADE)  # 根评论

    def __str__(self):
        return self.content

由于需要用到mysql,所以需要在setteings.py中配置数据库信息

在第一张User表中,由于是继承了AbstractUser,所以也需要配置信息

本文由美洲杯赌球发布于计算机教程,转载请注明出处:如何用django开发一个简易个人Blog,美洲杯赌球

TAG标签: 美洲杯赌球
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。