Django实现简单博客系统

  • 第一节 - 基础
    • 1. 简单的导览图,学会不迷路
    • 2. 基本操作介绍
    • 3. 命令简单介绍
    • 4. mysite:所建项目的管理功能目录
    • 5. blog:我们创建的项目之一
    • 6. db.sqlite3 : 默认的数据库
    • 7. 网站配置:mysite/setting.py
  • 第二节 - 博客开发
    • 1. 编写博客的数据模型类
    • 2. 生成数据库迁移文件&创建数据表
    • 3. 创建超级管理员
    • 4. 发布博客文章
    • 5. 显示博客信息
  • 第三节 - 思想整合
    • 1. 聊聊 MVC
    • 2. 聊聊设计理念
  • 结束

本文中相关信息部分来源《跟老齐学Python:Django实战》
官网地址:https://www.djangoproject.com/
本节代码地址:https://github.com/champion-yang/django_blog/tree/dev/blog_01

第一节 - 基础

1. 简单的导览图,学会不迷路


对 Django 的评价:借用李清照的《鹧鸪天 桂花》来表达,

暗淡轻黄体性柔。情疏迹远只香留。何须浅碧深红色,自是花中第一流。
梅定妒,菊应羞。画阑开处冠中秋。骚人可煞无情思,何事当年不见收。

Django makes it easier to build better Web apps more quickly and with less code.

  • 容易上手,开发速度快
  • 囊括了网站开发中的用户管理,内容管理,网站地图,RSS等常用的插件
  • 安全性强,解决了 SQL 注入,跨站攻击等问题
  • 应用广泛

2. 基本操作介绍

  • 安装:pip install Django
  • 创建项目:django-admin startproject mysite
  • 运行项目:python manage.py runserver
  • 创建应用:python manage.py startapp blog

3. 命令简单介绍

  • django-admin.py :django 的任务管理命令行工具
  • manage.py :对django-admin 的简单封装,同样可以实现命令行操作(最好对于该文件不要修改,也不要删除)

4. mysite:所建项目的管理功能目录

  • setting.py :项目初始化配置,可以针对整个项目进行有关参数的配置,比如数据库,添加应用等
  • urls.py :url 的配置表文件,主要是将url映射到应用程序上。可以是某个应用中的urls.py 文件,也可以是某个具体的视图函数。被称之为 URLconf,是 Django 一个非常强大的特性。
  • wsgi.py :web server gateway interface 的缩写。wsgi.py 定义了我们所创建的项目都是 wsgi 应用。

5. blog:我们创建的项目之一

  • admin.py :自定义 Django 管理工具,比如设置在管理界面能够管理的项目,或者重新定义与系统管理有关的类对象,向管理功能增加新的内容。
  • apps.py : 对应用的配置,比如为管理功能提供一个适合的应用名称
  • migrations:存储应用数据的表结构的指令,可以修改和创建数据库,从而子 models.py 模型类和数据库表之间迁移
  • models.py : 应用的数据模型
  • test.py : 编写测试文档
  • views.py : 用户保存各种请求的函数或者类。如果编写的是函数,则称之为基于函数的视图,如果编写的是类,则称之为基于类的视图。

6. db.sqlite3 : 默认的数据库

7. 网站配置:mysite/setting.py

  • DEBUG:开发的时候设置为 True。可以显示具体的报错信息。
  • ALLOWED_HOSTS:在 DEBUG 为 True 的时候,值可以为空。在部署到生产环境的时候,需要把主域名填写到这里,才能通过域名访问到本网站
  • INSTALLED_APPS: 所有的应用只有写到这里才会生效。
  • DATABASES: 配置数据库。默认为 sqlite
  • LANGUAGE_CODE: 设置姓名的语言。汉语设置为 ‘zh-hans’
  • TIME_ZONE: 设置时区,通常东八。 设置为:‘Aisa/Shanghai’

第二节 - 博客开发

默认已经创建好的 django 的项目和应用,并将应用注册到项目中

1. 编写博客的数据模型类

设计数据库和表结构是做网站的基础。

在 ./blog/model.py 中编写如下类

from django.db import models
from django.contrib.auth.models import User
# Create your models here.
from django.utils import timezoneclass BlogArticles(models.Model):title = models.CharField(max_length=300)author = models.ForeignKey(User, related_name='blog_posts', null=True, on_delete=models.SET_NULL)body = models.TextField()publish = models.DateTimeField(default=timezone.now)class Meta:ordering = ('-publish', )def __str__(self):return self.title

创建model 参考参数:

一、字段1、models.AutoField  自增列= int(11)如果没有的话,默认会生成一个名称为 id 的列,如果要显示的自定义一个自增列,必须将             给列设置为主键 primary_key=True。2、models.CharField  字符串字段必须 max_length 参数3、models.BooleanField  布尔类型=tinyint(1)不能为空,Blank=True4、models.ComaSeparatedIntegerField  用逗号分割的数字=varchar继承CharField,所以必须 max_lenght 参数5、models.DateField  日期类型 date对于参数,auto_now =True则每次更新都会更新这个时间;auto_now_add 则只是第一次创建添加,之后的更新不再改变。6、models.DateTimeField  日期类型 datetime同DateField的参数7、models.Decimal  十进制小数类型= decimal必须指定整数位max_digits和小数位decimal_places8、models.EmailField  字符串类型(正则表达式邮箱)=varchar对字符串进行正则表达式9、models.FloatField  浮点类型= double10、models.IntegerField  整形11、models.BigIntegerField  长整形integer_field_ranges ={'SmallIntegerField':(-32768,32767),'IntegerField':(-2147483648,2147483647),'BigIntegerField':(-9223372036854775808,9223372036854775807),'PositiveSmallIntegerField':(0,32767),'PositiveIntegerField':(0,2147483647),}12、models.IPAddressField  字符串类型(ip4正则表达式)13、models.GenericIPAddressField  字符串类型(ip4和ip6是可选的)参数protocol可以是:both、ipv4、ipv6验证时,会根据设置报错14、models.NullBooleanField  允许为空的布尔类型15、models.PositiveIntegerFiel  正Integer16、models.PositiveSmallIntegerField  正smallInteger17、models.SlugField  减号、下划线、字母、数字18、models.SmallIntegerField  数字数据库中的字段有:tinyint、smallint、int、bigint19、models.TextField  字符串=longtext20、models.TimeField  时间 HH:MM[:ss[.uuuuuu]]21、models.URLField  字符串,地址正则表达式22、models.BinaryField  二进制23、models.ImageField图片24、models.FilePathField文件
二、字段参数1、null=True数据库中字段是否可以为空2、blank=Truedjango的 Admin 中添加数据时是否可允许空值3、primary_key = False主键,对AutoField设置主键后,就会代替原来的自增 id 列4、auto_now 和 auto_now_addauto_now 自动创建---无论添加或修改,都是当前操作的时间auto_now_add 自动创建---永远是创建时的时间5、choicesGENDER_CHOICE = ((u'M', u'Male'),(u'F', u'Female'),)gender = models.CharField(max_length=2,choices = GENDER_CHOICE)6、max_length7、default  默认值8、verbose_name  Admin中字段的显示名称9、name|db_column  数据库中的字段名称10、unique=True  不允许重复11、db_index = True  数据库索引12、editable=True  在Admin里是否可编辑13、error_messages=None  错误提示14、auto_created=False  自动创建15、help_text  在Admin中提示帮助信息16、validators=[]17、upload-to

2. 生成数据库迁移文件&创建数据表

# 命令行执行
# 创建数据库表迁移文件
python manage.py makemigrations
# 查看迁移文件
python manage.py sqlmigrate blog 0001

然后会发现在migrations文件夹下生成了以0001开头的py文件,在命令行会输出我们的建表语句(sql)

# 生成数据表
python manage.py migrate

可以在 navicate 中连接 db.sqlite 进行数据的查看。

3. 创建超级管理员

python manage.py createsuperuser

跟着步骤就可以了,创建超级管理员的账号和密码。一定牢记嗷~

启动项目后访问 http://127.0.0.1:8000/admin/
然后就可以进入页面啦

页面中的 Groups 和 Users 是 Django 在用户管理应用中默认的。

4. 发布博客文章

我们登陆进来之后没有找到发布文章的地方,为什么呢?

接下来就需要我们对 ./blog/admin.py 文件做修改了。

from django.contrib import admin
from .models import BlogArticles
# 将该类BlogArticles注册到admin中
admin.site.register(BlogArticles)

再次返回我们的 http://127.0.0.1:8000/admin/ 就可以进行文章的添加了。

5. 显示博客信息

我们写好的文章如果想让别人看到,如何做呢?

在templates目录下创建一个文件base.html 和一个blog文件夹,里面有 title.html , content.html 文件

文件内容如下:

# base.html
<!DOCTYPE html>
<html lang="zh-cn">
<head><meta http-equiv="X-UA-Compatible" content="IE=Edge"><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=l"><title>{% block title %}{% endblock %}</title><link rel="stylesheet" href="http://necolas.github.io/nomalize.css/"><link rel="stylesheet" href="http://libs.baidu.com/bootstrap/3.0.3/css/bootstrap.min.css">
</head>
<body>
<div class="container">{% block content %}{% endblock %}
</div>
</body>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
</html># title.html
{% extends "base.html" %}{% block title %}博客标题
{% endblock %}{% block content %}<div class="row text-center vertical-middle-sm"><h1>小北的博客</h1></div><div class="row"><div class="col-xs-12 col-mo-8"><ul>{% for blog in blogs %}<li><a href="{{ blog.id }}">{{ blog.title }}</a></li>{% endfor %}</ul></div><div class="col-xs-6 col-mo-4"><h2>广告</h2><p>和我一起学python</p></div></div>
{% endblock %}
# content.html
{% extends "base.html" %}{% block title %}博客内容
{% endblock %}{% block content %}<div class="row text-center vertical-middle-sm"><h1>{{ article.title }}</h1></div><div class="row"><div class="col-xs-12 col-mo-8"><div><p>{{ article.author.username }}</p><p>{{ publish }}</p><p>{{ article.body }}</p></div></div><div class="col-xs-6 col-mo-4"><h2>广告</h2><p>和我一起学python</p></div></div>
{% endblock %}

一定要在 templates 下创建,这是Django 默认的存放本应用所需模版的目录

图为示例结构

在./blog/views.py 中编写视图函数

from django.shortcuts import render
from .models import BlogArticles
# Create your views here.def blog_title(request):blogs = BlogArticles.objects.all()return render(request, "blog/title.html", {"blogs": blogs})def blog_aritcle(request, article_id):article = BlogArticles.objects.get(id=article_id)pub = article.publishreturn render(request, "blog/content.html", {"article": article, "publish": pub})

在url中注册路由地址

在 blog/urls.py 中

from django.conf.urls import url
from . import views
from django.urls import path
from blog.views import *urlpatterns = [path('title', blog_title, name='blog_title'),path('<int:article_id>', blog_aritcle, name='blog_aritcle'),
]

在当前项目下的urls.py 中

from django.contrib import admin
from django.urls import path
from django.conf.urls import url, includeurlpatterns = [path('admin/', admin.site.urls, name='admin'),path('blog/', include('blog.urls')),]

然后页面就可以访问了,可以查看文章列表页和详情页。

第三节 - 思想整合

所有的思想都是建立的实践的基础上的,所以我把思想的整理放在了第三节。这一节主要会介绍道一些 Django 的设计理念,想到哪写到哪,有机会的话随时补充。

1. 聊聊 MVC

做后台开发,一定会知道这个名词 MVC,算是一种动态网站的设计模式吧。目的呢,我觉得还是从“懒”出发,因为懒得写重复的东西,所以在开发的时候,遇到相同的功能就想把他整合起来,然后发现有些

Django实现简单博客系统相关推荐

  1. php开发博客系统源码,php简单博客系统

    [实例简介] php简单博客系统,是基于php+mysql组合的简单系统,下来看看吧 [实例截图] [核心代码] webstar ├── web_star │   ├── code.php │   ├ ...

  2. Django实现的博客系统中使用富文本编辑器ckeditor

    操作系统为OS X 10.9.2,Django为1.6.5. 1.下载和安装 1.1 安装 ckeditor 下载地址 https://github.com/shaunsephton/django-c ...

  3. express+node+mysql简单博客系统(一):登录接口

    今年一直想学一下node,现在马上就到年底了,赶紧安排! 准备 使用node.express和mysql开发简单的博客系统: 1.先安装node.express和mysql: 2.创建node项目,也 ...

  4. python 毕业设计 源码 博客_blogs: 仅供学习参考使用,Python Django毕业设计——个人博客系统...

    大学毕业设计个人Blog博客系统 基于"python3.6.5"和"Django2"开发的的个人博客系统. 层级结构 cd bbs; tree . ├── bb ...

  5. 简单博客系统静态页面(html+css+JavaScript+第三方库Jquery mdn)

    目录 一.基本构造 1.博客列表页 2.博客详情页 3.登录页 4.博客编辑页 二.文件目录 1.css 文件夹 blog_detail.css blog_edit.css blog_list.css ...

  6. python毕业设计作品基于django框架个人博客系统毕设成品(6)开题答辩PPT

    整个项目包含了:开题报告 + 开题报告PPT + 任务书 + 中期报告 + 论文模板 + 答辩PPT等 + 项目源码 主要安介绍了系统在开发过程中所应用到的一些关键的技术 主要python技术介绍:框 ...

  7. 基于Django的个人博客系统开发

    文章目录 1.创建虚拟环境 2.pycharm创建django项目: 3.创建静态文件,配置settings.py,配置模板 4.django中配置日志器 5.网站的基本信息配置 6.数据库的设计 7 ...

  8. python毕业设计 基于django框架个人博客系统毕业设计设计与实现

    开发环境 开发语言:python:Python版本:3.8.7 开发框架:Django:Django版本:4.x 数据库:mysql:数据库版本:mysql8 数据库管理工具:navicat10+ 开 ...

  9. 这几天有django和python做了一个多用户博客系统(可选择模板) 没完成,先分享下...

    这个TBlog已经全新改版了,更名为UUBlog 新版地址: 用Python和Django实现多用户博客系统--UUBlog 断断续续2周时间吧,用django做了一个多用户博客系统,现在还没有做完, ...

最新文章

  1. 转载 什么叫真学习 什么叫假学习
  2. asp.net学习笔记 在GridView中添加链接
  3. python实现完全数
  4. php给图片加图片水印,php给图片添加文字或图片水印实现代码
  5. 启明云端分享|sigmastar SSW101B WiFi 非信令测试说明
  6. scanf的拓展用法——匹配特定字符
  7. Java 对象初始化过程
  8. python基础入门--input标签、变量、数字类型、列表、字符串、字典、索引值、bool值、占位符格式输出...
  9. STM32 IIC详解
  10. php sql中文乱码怎么解决,php显示mssql中文乱码怎么办
  11. 电商知识图谱的构建及搜索推荐场景下的应用实践
  12. 从基础到分析,聊一聊企业报表平台的建设规划!
  13. 五分钟快速过完Verilog HDL基本概念(5)数据类型
  14. 黑鲨helo支持html吗,黑鲨游戏手机Helo综合评测 到底值不值得买
  15. java.net cidr接口_CIDR - xiaohuazi - 博客园
  16. 28th Dec, 2012 我自己的问题
  17. oracle 时间段加减,ORACLE 时间加减操作
  18. 怎么注册Github?用手机2分钟完成注册,互联网就是互相连接
  19. mysqld: [ERROR] Found option without preceding group in config file /etc/my.cnf at line 1
  20. 好文章,转的Java重构

热门文章

  1. MySQL安装教程(详细)
  2. IDEA安装插件 之 使用本地下载的jar包安装
  3. Typora字体排版
  4. VScode交叉调试
  5. KNN算法改进约会网站匹配效果
  6. 使用SpringBoot实现责任链模式
  7. UBTC在2019,潮水褪去后的价值凸显
  8. My programs (我写的软件)
  9. tms320f2812启动流程
  10. Linux环境强制删除文件