Django搭建个人博客实战(1)简单的博客系统

最近开始学习老齐《Django实战》的内容,希望能够学会一些前端开发的知识,能够独立完成一些简单的界面编写。

在这里将操作过程及自己的笔记放在博客上,以备查阅和复习;

1.Django起步

1.1安装Django

sudo pip install Django

安装好后,可以先进入到Python的交互模式中,查看所安装的Django版本

import django
print(django.get_version)

基础设施已经建好,下面要创建项目了

1.2.创建项目
Django中的项目(project)可以看做是一个专有名词,因为后面还有一个与之有关的名词——应用(applicantion)

所谓“项目”,可以理解为一个网站
先规划好项目创建在什么地方,比如我放在桌面上,在终端输入:

~/mysite $ django-admin startproject mysite

看一下这个目录,多了一个mysite子目录,mysite就是项目名称

准备就绪,执行下述操作

$ python manage.py runserver

执行上述命令后,如果一切正常,最终会看到下面的提示信息:

Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C

提示信息的第一行代码表示已经启动了一个服务,可以通过 http://127.0.0.1:8000/ 访问;提示信息的第二行代码说明了结束当前服务的方法——按Ctrl+C组合键。

1.3.创建应用
项目已经创建好,网站也有了,接下来要实现网站的具体功能。在Django中,人们把具体的功能成为“应用”(application)

在终端中进入到刚才创建的项目目录,即manage.py文件所在的目录,然后执行:

python manage.py startapp blog

执行了语句后,在目录中多了一个blog,其中有了默认的文件和目录。

blog就是在项目mysite中新建的一个应用。当新的应用创建后,Django会自动在这个应用中添加一些文件。

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

设计数据库和表结构是做网站的基础。在Django中,我们不需要通过SQL语句直接跟数据库打交道,而是完全用Python的方式创建数据模型,之后交给Django完成数据库的操作。

2.1 数据模型类
利用Django开发网站系统,一般情况下,要先编写数据模型,就是在./blog/models.py中写一个类,这个类与数据库中的表具有对应关系。

下面就在./blog/models.py中编写博客的数据模型类Blog,本质上它是一个继承了django.db.models.Model的类

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User

class BlogArticles(models.Model):
    title = models.CharField(max_length = 300) 
    #规定了字段title的属性为CharField类型,并以参数max_length=30的形式说明字段的最大数量
    author=models.ForeignKey(User,related_name="blog_posts", on_delete=models.CASCADE)
    #通过字段author规定了博客文章和用户之间的关系:一个用户对应多篇文章
    #ForeignKey()就反映了这种“一对多”关系。
    #类User就是BlogArticles的对应对象,
    #related_name = "blog_post"允许类User反向查询到BlogArticles
    body = models.TextField()
    publish = models.DateTimeField(default=timezone.now)


    class Meta:
        ordering = ("-publish",)

    def __str__(self):
        return self.title

执行python manage.py makemigrations,简历数据库表,并在此基础上真正创建数据库,执行:python manage.py migrate

本项目使用SQLite数据库,并且在setting.py中规定了数据库文件存放在项目根目录中。这样就建立了博客的数据库——这是基础,接下来就是发布博客,并保存到这个数据库中。

2.2 发布博客文章

先用最简单的方式——使用Django默认的管理功能就可以发布文章。要使用此功能,必须先创建超级管理员,并牢记自己所使用的用户名和密码:

python manage.py createsuperuser

记住上面的用户名和密码,然后运行服务器,在地址栏输入http://127.0.0.1:8000/admin/,输入刚才的用户名和密码就可以进入系统。

用编辑工具打开./blog/admin.py,然后输入代码:

from django.contrib import admin
from .models import BlogArticles

admin.site.register(BlogArticles)
#将BlogArticles类引入到当前环境,然后注册到admin中

再进入到blog中,可以看到Blog articles,进入并选择“Add”添加博客文章。

Django搭建个人博客实战(1)简单的博客系统_第1张图片

在文章的列表页,可以看到所有已发布的文章标题。
为了让列表页信息丰富,还可以再admin.py中多写点东西:

from django.contrib import admin
from .models import BlogArticles
# Register your models here.

class BlogArticlesAdmin(admin.ModelAdmin):
    list_display = ("title", "author", "publish")
    list_filter = ("publish", "author")
    search_fields = ("title", "body")
    raw_id_fields = ("author",)
    date_hierarchy = "publish"
    ordering = ["publish", "author"]


admin.site.register(BlogArticles, BlogArticlesAdmin)

会呈现如下结果
Django搭建个人博客实战(1)简单的博客系统_第2张图片

3.显示博客信息

将博客内容保存到数据库还不是发布博客的终极目的,之所以要在网上撰写博客,目的就是通过吸引他人关注达到自己的某种目的,所以,写博客一定要显示出来。

3.1 显示文章标题

要显示文章标题,就要把标题从数据库中读出来。在数据库中专门有一个title字段储存标题。如何读到具体内容?一种方法是通过SQL语句,另一种就是利用Django进行读取。当我们在models.py中创建了数据模型后,Django就会自动提供数据库抽象的API,通过这个API可以创建、获取、修改和删除对象。

下面写一个函数来专门读取文章标题,通常写在./blog/views.py中

from .models import BlogArticles
# Create your views here.


def blog_title(request):
    blogs = BlogArticles.objects.all()
    #得到所有BlogArticles实例
    return render(request, "blog/titles.html", {"blogs":blogs})
    #以return结束当前函数,并返回结果

像blog_title()这个函数,是在视图文件views.py中编写的一个函数,这种方式称之为“基于函数的视图”,这个函数被叫做“视图函数”。

在render中出现的titles.html就是标题列表的前端显示页面——被称为“模板”,在每个应用中都可以有一个专门的模板目录,现在进入blog的目录建立一个子目录templates,名称和位置都必须如此。

templates目录是Django磨人的存放本应用所需模板的目录,如果不用自定义的方式制定模板位置,Django就会在运行时自动来这里查找render函数中所制定的模板文件。

在模板目录中,有一个base.html文件,试讲所有模板中公共的部分抽取出来,在其他文件中只需要编写个性部分的代码。也就是说,在Django的模板文件中,是可以有“继承”功能的。本项目中,就这样来编写base.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=1">
    <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>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js">script>
<script src="http://libs.baidu.com/bootstrap/3.0.3/js/bootstrap.min.js">script>
body>
html>

这就是一个基础模板,下面编写与标题列表相对应的模板,即./templates/blog/titles.html文件:


<html lang="zh-cn">

{% extends "base.html" %}

{% block title %}blog titles{% endblock %}

{% block content %}
<div class="row text-center vertical-middle-sm">
    <h1>我的博客h1>
div>
<div class="row">
    <div class="col-xs-12 col-md-8">
    <ul>
    {% for blog in blogs %}
        <li><a href="{{ blog.id }}">{{ blog.title }}a>li>
    {% endfor %}
    ul>
    div>
    <div class="col-xs-6 col-md-4">
    <h2>刘克凡h2>
    <p>哇塞这居然是我自己搞出来的博客!p>
    <img width="200px" src="http://www.v3wall.com/wallpaper/1920_1080/1207/1920_1080_20120723011137532854.jpg">
    div>
div>
{% endblock %}

函数和模板都编写好之后,要想通过网页访问,还需要做好另外一项重要的工作,就是进行URL配置。首先配置./mysite/urls.py,在这个文件中配置本项目的各个应用。

from django.contrib import admin
from django.conf.urls import url, include
from django.urls import re_path

urlpatterns = [
    re_path(r'^admin/', admin.site.urls),
    url(r'^blog/', include('blog.urls'))
]

接下来配置./blog/urls.py中的URL,需要先创建,然后配置:

from django.conf.urls import url
from . import views

app_name = 'blog'
urlpatterns = [
    url(r'^$', views.blog_title, name="blog_title"),
]

现在就可以打开浏览器,输入地址http://127.0.0.1:8000/blog/,效果如下图:
Django搭建个人博客实战(1)简单的博客系统_第3张图片
显示文章标题的目的已经实现,有了标题就可以查看文章了。

3.2 查看文章内容

文章标题还需要做超链接,对象就是文章详情页,对此应该在titles.html中显示标题的部分做相应修改:

   {% for blog in blogs %}
        <li><a href="{{ blog.id }}">{{ blog.title }}a>li>
    {% endfor %}

这时候每个标题都有了超链接,但点击还不能显示详情,需要做后续工作。

创建./templates/blog/content.html文件:

{% extends "base.html" %}

{% block title %}blog titles{% 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-md-8">
        <p class="text-center"><span>{{ article.author.username }}span><span
                style="margin-left:20px">{{ publish }}span>p>
<div>{{ article.body }}div>
div>
    <div class="col-xs-6 col-md-4">
    <h2>刘克凡h2>
    <p>哇塞这居然是我自己搞出来的博客!p>
    <img width="200px" src="http://www.v3wall.com/wallpaper/1920_1080/1207/1920_1080_20120723011137532854.jpg">
    div>
div>
{% endblock %}

接着配置URL,因为还是针对blog这个应用而言,所以只需要在./blog/urls.py中增加新的url路径。

from django.conf.urls import url
from . import views

app_name = 'blog'
urlpatterns = [
    url(r'^$', views.blog_title, name="blog_title"),
    url(r'(?P\d)/$', views.blog_article, name="blog_detail"),
]

现在访问博客标题网页,然后查看详细内容:
Django搭建个人博客实战(1)简单的博客系统_第4张图片

至此,一个博客就创建完成了,虽然简陋,但显示了Django在网站开发中的基本结构,为以后较复杂的开发奠定了基础。

“道路是曲折的,前途是光明的”,后续还有挑战。

你可能感兴趣的:(Django实战)