Django搭建个人博客系列: 环境准备及简单的博客系统搭建

之前的Linux环境准备工作,可以参考我之前的博客在Win10下利用VMware安装Ubuntu20.04教程。下面开始构建虚拟环境,以后写多个项目防止污染其他项目环境。

1. 创建虚拟环境

# 安装Python venv库
sudo apt-get install python3-venv
# 创建虚拟环境
mkdir env
cd env
python3 -m venv .
# 激活虚拟环境
source bin/activate

 

 2. 创建 Django 项目

# 安装django库
pip3 install django
# 创建项目, 创建成功后,将最外层的cofig目录,改为MyBlog
django-admin startproject config

更改后的目录结构

# 更改后的目录
MyBlog
├── config
│   ├── asgi.py
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── db.sqlite3
├── manage.py

 创建App与项目进行关联

python manage.py startapp blog

在config/setting.py中的INSTALLED_APPS中添加创建的app: blog。

 同步数据库并创建超级管理员

# 同步数据库
python manage.py migrate
# 创建超级管理员
python manage.py createsuperuser
# 启动项目
python manage.py runserver

在网址后面加上/admin,输入刚才创建的管理员账号登录Django管理后台。

 在settings.py中修改语言及时区:

 创建博客需要的数据表

在MyBlog/blog/models.py中新建一个类Blog,继承models.Model,创建博客需要的几个属性。

from django.db import models
# Create your models here.
class Blog(models.Model):
    title = models.CharField(max_length=50, verbose_name='标题')
    content = models.TextField(verbose_name='文章内容', default='')
    count = models.IntegerField(verbose_name='阅读次数', default=0)
    create_time = models.DateTimeField(auto_now=True, verbose_name='创建时间')

    class Meta:
        verbose_name = '博客管理'
        verbose_name_plural = verbose_name
    
    def __str__(self):
        return self.title

添加到后台,在MyBlog/blog/admin.py增加如下代码

from django.contrib import admin
from .models import Blog
# Register your models here.
# admin.site.register(Blog)
@admin.register(Blog)
class BlogAdmin(admin.ModelAdmin):
    list_display = ('title', 'create_time', 'count')

 同步到数据库

python manage.py makemigrations
python manage.py migrate

3. 编写页面逻辑

在MyBlog目录下创建templates目录,并将该页面模板文件夹添加到settings.py中。

 修改 views.py 文件

from django.shortcuts import render
from .models import Blog
# Create your views here.
def index(request):
    blogs = Blog.objects.all().order_by('-create_time')

    return render(request, 'index.html', {'blogs': blogs})

修改 urls.py 文件

from django.contrib import admin
from django.urls import path
from blog.views import index, read_blog

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index, name='index'),
]

在 templates 文件夹下创建一个 index.html 文件

<html>
    <head>
        <title>我的首页</title>
    </head>
    <body>
        <h1>欢迎来到我的网站</h1>
        <ul>
        {% for blog in blogs %}
            <li><a href="{% url 'read_blog' blog.id %}">{{ blog.title }}</a></li>
            <p>{{ blog.content }}</p>
            <p> 创建于{{ blog.create_time }}</p>
        {% endfor %}
        </ul>
    </body>
</html>

刷新页面可以看到如下显示

添加文章详情页面,在templates 文件夹下创建一个 content.html 文件

<html>
    <head>
        <title>我的首页</title>
    </head>
    <body>
        <a href="/" style="float:right">回到首页</a>
        <h1>{{blog.title}}</h1>
        <div>
        {{blog.content}}
        </div>
    </body>
</html>

修改 views.py 文件

from django.shortcuts import render
from .models import Blog

# Create your views here.
def index(request):
    blogs = Blog.objects.all().order_by('-create_time')

    return render(request, 'index.html', {'blogs': blogs})

def read_blog(request, id):
    blog = Blog.objects.get(id=id)
    return render(request, 'content.html', {'blog': blog})

 

修改 urls.py 文件

from django.contrib import admin
from django.urls import path
from blog.views import index, read_blog

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', index, name='index'),
    path('read/<int:id>', read_blog, name='read_blog'),
]

 到此一个简单的博客系统雏形就搭建出来了,后面的系列会对此系统进行的页面显示进行扩展及丰富。

posted @ 2021-06-20 14:54  呆叔编程567  阅读(205)  评论(0编辑  收藏  举报