Django框架
- 安装Django
$ pip install Django==2.2
- 执行manage.py可以看见创建子app的命令
$ python manage.py startapp blog
- 将创建的子app注册到配置文件中
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
# …………
# 创建的子app要记得注册到配置文件中
'blog'
]
- 先定义数据库模型
from django.db import models
# Create your models here.
class blog(models.Model):
# 博客标题
title = models.CharField(max_length=20)
# 博客正文
content = models.TextField()
# 博客发表日期
published_date = models.DateTimeField()
# related_nameg:反向索引,给Tag增加外键属性blogs
tags = models.ManyToManyField('Tag', related_name='blogs')
# TypeError: __init__() missing 1 required positional argument: 'on_delete'
# 当关联表中数据被删除时,该外键什么也不做
category = models.ForeignKey('Category', related_name='blogs', on_delete=models.DO_NOTHING)
class Tag(models.Model):
# blog:tag = n : n
tag = models.CharField(max_length=10)
class Category(models.Model):
# blog:category = n : 1
# 外键写在多的一段
category = models.CharField(max_length=10)
- 数据库配置
# settings.py
# 默认使用的是sqlite数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
- 当数据库设计完成,执行数据库迁移
# 先生成迁移文件
$ python manage.py makemigrations
# 在将迁移文件的操作执行到数据库中
$ python manage.py migrate
- 创建超级用户
$ python manage.py createsuperuser
- 运行Django项目
$ python manage.py runserver
- 进入后台管理界面
http://127.0.0.1:8000/admin
- 添加后台展示的模块需要自定义admin
from django.contrib import admin
# Register your models here.
from .models import Category, blog, Tag
admin.site.register(blog)
admin.site.register(Category)
admin.site.register(Tag)
- 后台的中文展示
# settings.py
LANGUAGE_CODE = 'zh-Hans'
TIME_ZONE = 'Asia/Shanghai'
# 数据库模型中给各个字段设置verbose_name属性
- 博客首页路由设置
# blog/views.py
def index(request):
# request, template_name
return render(request, 'blog/index.html')
# 其中要在settings.py中设置模板的位置
# 在blog中传见urls.py文件设置路由
# blog/urls.py
from django.conf.urls import url
from .views import index
urlpatterns = [
url(r'^$', view=index, name='index')
]
# 然后将子app的路由加载到总路由中
# myBlog/urls.py
urlpatterns = [
path('admin/', admin.site.urls),
url(r'', include('blog.urls'))
]
- 在将index.html放在模板中时候要注意静态文件的路径
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
- 在html中静态文件的使用
开头加载静态文件
{% load static %}
{% static '路径名称' %}
- 使得博客内容支持markdown语法显示
$ pip install markdown
def index(request):
# request, template_name
# 先查询数据库的信息
blogs = blog.objects.all()
# 遍历每一篇博客,使得他支持markdown语法S
for item in blogs:
item.content = markdown.markdown(item.content,
extensions=[
'markdown.extensions.extra',
'markdown.extensions.codehilite',
'markdown.extensions.toc',])
return render(request, 'blog/index.html',
# 将博客信息传递给前端页面
context={
'blogs': blogs
})
# 为了防止浏览器自动转义,需要在前端页面加入过滤器
<p>{{ blog.content | safe }}</p>
- 支持语法高亮
$ pip install pygments
<link href="{% static 'css/highlights/github.css' %}" rel="stylesheet">
- 效果展示
网址:https://gitee.com/hugeblackdog/personal_blog_system