搭建个人博客

Author Avatar
Erien 7月 25, 2018

Django 搭建个人博客#


第一次使用Django搭建网页,和PHP有相似的地方,后端渲染(数据绑定)返回前端页面。但是相比较于PHP,django有更为明显和直接的优点:

  • 强大的模板渲染
  • 自身的数据库模型
  • 代码整体迁移能力整体
  • 更大型的网站架构和插件

环境:macos + python3.6 + django2.0 + pycharm2018.2

使用Pycharm进行Django项目的初始化,免除了

$ sudo python3 django-admin.py startproject blog

这样一个过程


首先新建我们所需要用到的文章应用(app)

$ sudo python3 manage.py startapp article

在setting文件中添加article应用,并设置好一篇文章的数据库储存方式。这里我采用的是

class Article(models.Model):
    title = models.CharField(u'标题', max_length=50)
    id = models.AutoField(primary_key=True)
    pub_date = models.DateTimeField(u'发布日期',auto_now_add=True, editable=False)
    edit_date = models.DateTimeField(u'最后修改日期', auto_now=True, editable=False)
    content = models.TextField(blank=True, null=True)

这样的一个数据格式,通过主键ID拿到文章数据。



首先设置root账户以及绑定后台对Article模型的管理

$ sudo python3 manage.py createsuperuser

并完成后续,同时注册模型

#/article/admin.py
from django.contrib import admin
from .models import Article

admin.site.register(Article)

django为我们提供了一个很好的后台管理系统,这里我用来做文章的发布和修改。


整个博客有两个页面indexarticle分别是主页和文章的详细内容。

主页通过

def index(request):
    Article_list = Article.objects.order_by('-pub_date')
    template = loader.get_template('index/index.html')
    context = {
        'list': Article_list,
    }
    return HttpResponse(template.render(context, request))

拉取文章列表并通过

{% for article in list %}
    #do sth..
{% endfor %}

进行读取。


在article页面通过传入的参数

def article(request, id_):
    article_ = get_object_or_404(Article, id=id_)
    article_.content = markdown.markdown(article_.content,
extensions=[
'markdown.extensions.extra',
'markdown.extensions.codehilite',
'markdown.extensions.toc',
])
template = loader.get_template('article/article.html')
    context = {
        'article': article_,
    }
    return HttpResponse(template.render(context,request))

拿到文章内容或抛出404
这里可以看到,我在文章详情页模板中使用了Markdown语法,是通过python中的 Markdown 解析库实现的。

在数据库中存放的是带有Markdown语法的文本,通过Markdown解析成为html语言后插入。

这里有两点需要注意的:

  • django对html文本加载的阻止
  • html标签的样式

一般的框架都有防止xss注入的过程,关闭django的阻止可以让html代码成功加载

{% autoescape off %}
    {{ article.content }}
{% endautoescape %}

然后,Markdown解析库并不会在生成html代码的时候给出css样式,所以 ⌘ + Alt + I 打开Chrome的开发者工具对照每个html的类名将你喜欢的css样式写进相应的css文件中


写markdown语法要有很好的对照,推荐 Cmd Markdown编辑阅读器 除了注册才能保存其他我觉得都很好。


tool-editor
tool-manager有很好的编辑栏


万事预备只欠东风,准备一下就可以放到服务器上

  • 制作数据库迁移文件
  • 关闭DEBUG模式
  • 修改可访问域名

制作迁移文件

$ sudo python3 manage.py makemigrations

然后在setting文件中DEBUG改为False

下面allowed_host改为[‘*’]任意域名模式


移动到服务器后进行数据库合并

$ sudo python manage.py migrate

最后由于关闭了debug模式,常规下是无法读取静态文件的,开启端口监听的时候选择不安全模式。

$ sudo python manage.py runserver 0.0.0.0:80 --insecure

就可以啦!