搭建个人博客
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为我们提供了一个很好的后台管理系统,这里我用来做文章的发布和修改。
整个博客有两个页面index
和article
分别是主页和文章的详细内容。
主页通过
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编辑阅读器 除了注册才能保存其他我觉得都很好。
有很好的编辑栏
万事预备只欠东风,准备一下就可以放到服务器上
- 制作数据库迁移文件
- 关闭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
就可以啦!