前言

本章主要讲述基于Django框架上,搭建一个比较简单的个人博客

ps:觉得页面太丑了的话大家可以自己优化,前端我这里没套框架直接用的原生css+html
我的审美止于此了 - -

  • github源码地址:https://github.com/Burden1/Mikasa_simple_blog

环境:

  • python 3.6
  • Pycharm
  • Django 2.0.13
  • mysql 5.7


一、Django框架介绍

1、创建Django项目

  • 直接在pycharm里新建一个Django项目即可


2、框架简要介绍

  • 创建完后会自动生成Django的框架,那我们这part就简单介绍一下各个文件是干啥的


二、框架搭建

1、后台搭建

1.1)settings.py

"""
Django settings for MyDjango project.Generated by 'django-admin startproject' using Django 3.2.13.For more information on this file, see
https://docs.djangoproject.com/en/3.2/topics/settings/For the full list of settings and their values, see
https://docs.djangoproject.com/en/3.2/ref/settings/
"""
import os
from pathlib import Path# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parentSECRET_KEY = 'django-insecure-^p87-rpgr!ujeb6+9&3n_5dj*(h9313n8801uss$vvwloqic_z'# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = TrueALLOWED_HOSTS = []# Application definitionINSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles',# 应用配置'MyBlog.apps.MyblogConfig',
]MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware','django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]ROOT_URLCONF = 'MyDjango.urls'TEMPLATES = [{'BACKEND': 'django.template.backends.django.DjangoTemplates','DIRS': [os.path.join(BASE_DIR, 'templates')],'APP_DIRS': True,'OPTIONS': {'context_processors': ['django.template.context_processors.debug','django.template.context_processors.request','django.contrib.auth.context_processors.auth','django.contrib.messages.context_processors.messages',],},},
]WSGI_APPLICATION = 'MyDjango.wsgi.application'# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases# 1、改为你自己的数据库配置
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'myblog','USER': 'root','PASSWORD': 'yy1998123','HOST': '127.0.0.1','PORT': '3306',}
}# Password validation
# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validatorsAUTH_PASSWORD_VALIDATORS = [{'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',},{'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',},{'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',},{'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',},
]# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/LANGUAGE_CODE = 'en-us'TIME_ZONE = 'UTC'USE_I18N = TrueUSE_L10N = TrueUSE_TZ = True# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/STATIC_URL = '/static/'# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-fieldDEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

1.2)model.py

"""数据库表模型类
"""
from __future__ import unicode_literals
from django.db import modelsclass Category(models.Model):"""博客分类"""name = models.CharField('名称', max_length=30)class Meta:verbose_name = "类别"verbose_name_plural = verbose_namedef __unicode__(self):return self.nameclass Tag(models.Model):"""博客标签"""name = models.CharField('名称', max_length=16)class Meta:verbose_name = "标签"verbose_name_plural = verbose_namedef __unicode__(self):return self.nameclass Blog(models.Model):"""博客"""title = models.CharField('标题', max_length=32)author = models.CharField('作者', max_length=16)content = models.TextField('内容')pub = models.DateField('发布时间', auto_now_add=True)# on_delete解释:当子表中的某条数据删除后,关联的外键操作# on_delete = models.SET_NULL# 置空模式,删除时,外键字段被设置为空,前提就是blank=True, null=True,定义该字段时,允许为空。# 理解:删除关联数据(子表),与之关联的值设置默认值为null(父表中),这个前提需要父表中的字段可以为空。category = models.ForeignKey(Category, verbose_name='分类', on_delete=None)  # 多对一(博客--类别)# 多对多关系,没有on_delete参数tag = models.ManyToManyField(Tag, verbose_name='标签')  # (多对多)class Meta:verbose_name = "博客"verbose_name_plural = verbose_namedef __unicode__(self):return self.titleclass Comment(models.Model):"""博客评论"""blog = models.ForeignKey(Blog, verbose_name='博客', on_delete=None)  # (博客--评论:一对多)name = models.CharField('称呼', max_length=16)email = models.EmailField('邮箱')content = models.CharField('内容', max_length=240)pub = models.DateField('发布时间', auto_now_add=True)class Meta:verbose_name = "评论"verbose_name_plural = "评论"def __unicode__(self):return self.content

1.3)admin.py

"""# Register your models here.django自带的后台管理系统在这儿注册你的模型
"""
from django.contrib import admin
from .models import *class CategoryAdmin(admin.ModelAdmin):list_display = ('name',)class TagAdmin(admin.ModelAdmin):list_display = ('name',)class BlogAdmin(admin.ModelAdmin):list_display = ('title', 'category', 'content', 'pub')class CommentAdmin(admin.ModelAdmin):list_display = ('blog', 'name', 'content', 'pub')admin.site.register(Category, CategoryAdmin)
admin.site.register(Tag, TagAdmin)
admin.site.register(Blog, BlogAdmin)
admin.site.register(Comment, CommentAdmin)

1.4)创建数据库及字段

# teminal输入命令
python manage.py makemigrations
python manage.py migrate# 创建管理员用户
python manage.py createsuperuser


1.5)后台管理员模块展示

  • 访问127.0.0.1:8000/admin即可查看后台管理系统


2、前台搭建

2.1)views.py

"""视图函数注意所有的视图函数需要在urls中进行配置
"""
from django.shortcuts import render, render_to_responsefrom .models import *from .forms import CommentForm
from django.http import Http404def get_blogs(request):# 获得所有的博客按发布时间降序排blogs = Blog.objects.all().order_by('-pub')# 传递context:blog参数到固定页面return render_to_response('blog_list.html', {'blogs': blogs})def get_details(request, blog_id):# 检查异常try:blog = Blog.objects.get(id=blog_id)  # 获取固定的blog_id的对象;except Blog.DoesNotExist:raise Http404if request.method == 'GET':form = CommentForm()else:  # 请求方法为Postform = CommentForm(request.POST)if form.is_valid():cleaned_data = form.cleaned_datacleaned_data['blog'] = blogComment.objects.create(**cleaned_data)ctx = {'blog': blog,'comments': blog.comment_set.all().order_by('-pub'),'form': form}  # 返回3个参数return render(request, 'blog_details.html', ctx)

2.2)urls.py

"""配置文件路由
"""
from django.conf.urls import url
from django.contrib import admin
from django.urls import pathfrom MyBlog.views import get_blogs, get_detailsurlpatterns = [# path(..)是Django2.0的写法,url(...)是Django1.0的写法path('admin/', admin.site.urls),url(r'^blog/$', get_blogs),url(r'^detail/(\d+)/$', get_details, name='blog_get_detail'),
]

2.3)forms.py

  • 因为我们想要实现博客的评论功能,所以我们新增一个forms.py

"""博客的评论功能
"""
from django import formsclass CommentForm(forms.Form):name = forms.CharField(label='昵称', max_length=16, error_messages={'required': '请填写您的昵称','max_length': '昵称太长,请重新修改!'})email = forms.EmailField(label='邮箱', error_messages={'required': '请填写您的邮箱','invalid': '邮箱格式不正确'})content = forms.CharField(label='内容', error_messages={'required': '请填写您的评论内容!','max_length': '评论内容太长咯'})

3、模板页面

3.1)blog_list.html

<!DOCTYPE html>
<html lang="zh">
<head><meta charset="UTF-8"><title>Mikasa的博客</title><style type="text/css">body {color: #efd;background: #8d8a8a;padding: 12px 5em;margin: 7px;}h1 {margin-top: -10px;padding: 2em;background: #4e583b;}h2 {color: #4e583b;border-top: 1px dotted #fff;margin-top: 2em;padding-top:15px;}a {text-decoration:none;}.blog {padding: 20px 0px;}.blog .info span {padding-right: 10px;}.blog .summary {padding-top: 20px;}p {text-indent:2em}</style>
</head>
<body>
<div class="header"><h1 align="center">Mikasa的博客</h1>
</div>
<h3 style="margin-bottom: -50px;font-size: x-large;">博客列表
</h3>
<hr/>
{% for blog in blogs %}<div align="center" class="blog"><div class="title"><a href="{% url 'blog_get_detail' blog.id %} "dec><h2 align="left" >{{ blog.title }}</h2></a></div><div class="info" align="left"><span class="category" style="color: #eeccad;">{{ blog.category.name }}</span><span class="author" style="color: #2964af;">{{ blog.author }}</span><span class="pub" style="color: #90d56b">{{ blog.pub }}</span></div><div class="summary"><p align="left">{{ blog.content | truncatechars:100 }}</p></div></div>
{% endfor %}
</body>
</html>

3.2)blog_details.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{{ blog.title }}</title><style type="text/css">.blog {padding: 20px 0px;}.blog .info span {padding-right: 10px;}.blog .summary {padding-top: 20px;}body {color: #efd;background: #8d8a8a;padding: 12px 5em;margin: 7px;}h1 {margin-top: -10px;padding: 2em;background: #4e583b;color: #eeffdd;}h2 {color: #4e583b;{#border-top: 1px dotted #fff;#} margin-top: 2em;padding-top: 15px;}a {text-decoration: none;}span {font-size: 18px;line-height: 2em;}p {text-indent:2em}</style>
</head>
<body>
<div class="header"><div class="title" align="center"><a href="#"><h1>{{ blog.title }}</h1></a></div>
</div><div class="content"><div class="blog"><div class="info" align="center"><span class="category" style="color: #eeccad;" border="10px" >{{ blog.category.name }}</span><span class="author" style="color: #2964af;">{{ blog.author }}</span><span class="pub" style="color: #90d56b">{{ blog.pub }}</span></div><p class="summary">{{ blog.content }}</p><div class="comment"><div class="comment-diaplay" style="padding-top: 1cm;"><h3 >评论</h3>{% for comment in comments %}<div class="comment-field" style="padding-top: 10px; color: #49491a">{{ comment.name }}说:{{ comment.content }}</div>{% endfor %}</div><div class="comment-post" style="padding-top: 20px ;"><h3>提交评论</h3><form action="{% url 'blog_get_detail' blog.id %}" method="post">{% csrf_token %}{% for field in form %}<div class="input-field" style="padding-top: 10px;">{{ field.label }}:{{ field }}</div><div class="error" style="color: #ff0000;">{{ field.errors }}</div>{% endfor %}<button type="submit" style="margin-top:20px ">提交</button><button type="reset" style="margin-top:20px ">重置</button></form></div></div></div>
</div>
</body>
</html>

三、运行项目及展示

  • 访问博客地址:http://127.0.0.1:8000/blog/

Django(一)简单的个人博客搭建实战相关推荐

  1. hexo+GitHub博客搭建实战

    我的个人博客链接:wangwlj.com 想要搭建类似的博客吗? 如果是,那就赶快点进来吧-- 手把手教学,现在开始!! PS: 将会在个人博客持续更新,本文链接:hexo+GitHub博客搭建实战. ...

  2. Django个人博客搭建4-配置使用 Bootstrap 4 改写模板文件

    Django个人博客搭建1-创建Django项目和第一个App Django个人博客搭建2-编写文章Model模型,View视图 Django个人博客搭建3-创建superuser并向数据库中添加数据 ...

  3. Django个人博客搭建教程---用Vue写你的第一个前后端分离页面

    一.构建Vue.js前端项目 npm install vue-cli -g npm install webpack -g 在项目根目录下(和你的app目录平级) vue init webpack my ...

  4. Django个人博客搭建8-优化文章模块

    Django个人博客搭建1-创建Django项目和第一个App Django个人博客搭建2-编写文章Model模型,View视图 Django个人博客搭建3-创建superuser并向数据库中添加数据 ...

  5. VuePress博客搭建笔记(一)简单上手

    前奏较长,不墨迹的可直接跳转至 04.开始搭建博客 或者 博客预览 00.契子 偶尔的整理洁癖 平常有收藏+书签的习惯 github私有仓库免费开放 翻看博文 : 作为软件工程师,如何进行知识管理 0 ...

  6. 博客搭建攻略(三):创造收益

    在前两篇博客搭建攻略中,主要介绍了博客平台的选择以及写博的常用工具.作为本系列的最后一篇,可能也是大家最感兴趣的一篇,我将给大家介绍一下在博客编写过程中,是如何创造收益的. 下面,以我个人为例,总结一 ...

  7. 博客搭建攻略(二):工具推荐

    回顾:博客搭建攻略(一):平台选择 预告:博客搭建攻略(三):创造收益,如果兴趣就关注我吧~ 通过上一篇的教程,根据自己的需求选择一款博客平台,就能完成博客的搭建.在这之后,我们的主要任务就是创作内容 ...

  8. 博客搭建攻略(一):平台选择

    本系列文章预告 博客搭建攻略(一):平台选择 博客搭建攻略(二):工具推荐 博客搭建攻略(三):创造收益 如您对本系列内容感兴趣,就点击标题下方的程序猿DD关注我吧~ 前言 虽然在大学生涯就有开始写技 ...

  9. hexo博客搭建及主题优化(一)

    个人博客 个人博客: https://www.crystalblog.xyz/ 备用地址: https://wang-qz.gitee.io/crystal-blog/ HexoBlog 个人博客 介 ...

  10. Django 学习小组:博客开发实战第二周教程 —— 实现博客详情页面和分类页面

    本教程内容已过时,更新版教程请访问: django 博客开发入门教程. 上周我们完成了博客的 Model 部分,以及 Blog 的首页视图 IndexView. 本节接上周的文档 Django 学习小 ...

最新文章

  1. 把数据库中有关枚举项值的数字字符串转换成文字字符串
  2. 深入理解Lustre文件系统-第13篇 未来的工作
  3. autocad.net中ResultBuffer相关的常量值
  4. 用Backbone.js创建一个联系人管理系统(一)
  5. 信息学奥赛一本通C++语言——1024:保留3位小数的浮点数
  6. RabbitMQ消息队列:发布/订阅(Publish/Subscribe)
  7. 父、子、兄弟节点查找方法
  8. c++画函数图像_二次函数图像与系数a,b,c的关系
  9. unable to verify the first certificate
  10. 高并发下的HashMap
  11. webpack使用笔记
  12. Unity初级坦克大战游戏实现(Battle Tank)带工程源码资源包(二)
  13. 什么是软件质量?试叙述它与软件可靠性的关系。
  14. 如何定向网件路由防火墙与URL
  15. windows server2012计算机管理“系统工具”里面没有“本地用户和组”怎么办?
  16. 2021SC@SDUSC山东大学软件学院软件工程应用与实践--Ebiten代码分析 源码分析(三)
  17. Android Studio 快捷键整理
  18. 傲游 android 2.3,傲游浏览器安卓版-傲游浏览器手机版v5.2.3.3256-3454手机软件
  19. yii2 smarty php,yii框架整合Smarty
  20. Python练习-合并excel表格

热门文章

  1. R语言中,用多组散点图加折线,展现不同地区美女数量变化趋势?
  2. 未来规划——北京大学数院432应用统计备考攻略
  3. 2021放假安排时间表
  4. 计算机控制中的pid是什么意思,PID 是什么意思
  5. windows7打不开html文件格式,mht是什么文件?Win7打不开mht格式文件的解决办法
  6. 波段高低点指标公式 k线高低点 大盘主图公式
  7. 超脑计划孵出的阿尔法蛋 拥有什么超能力?
  8. excel2007/2010中独立显示窗体的方式
  9. 学计算机的能看出批图吗,P过的图片能看出来吗?给你4个鉴别方法!
  10. 操作ADS1115进行4个通道AD值的读取