2017/8/31 18:27:59

为了以后参考的方便,在这里总结一下django搭建博客网站的主要步骤。以下大部分的内容,参考自Django中文文档 - 看云

需要强调的是,这里使用的django版本是1.8。这是因为,不同版本之间的django之间存在一定的差异。

1.安装django

在命令行中使用如下命令安装django

pip install django==1.8

安装结束后,在命令行中输入python,进入python命令行。然后尝试导入django

>>> import django
>>> django.get_version()
'1.8'

这说明,django安装成功了。

2.创建项目mysite

在命令行中,使用cd命令进入你想存储代码的目录,然后运行如下命令

python django-admin.py startproject mysite

于是,当前目录下建立了一个mysite目录,结构如下

mysite/
manage.py
mysite/
__init__.py
setting.py
urls.py
wsgi.py

从外层的mysite目录切换进去,通过如下命令,我们就能运行服务器

python manage.py runserver

http://127.0.0.1:8000/,我们将看到如下页面

3.编辑setting.py

在mysite/settings.py中保存着django项目的配置。通过编辑它,可以修改项目的配置。

设置语言版本

LANGUAGE_CODE = 'zh-cn'

注:在1.9及以后的版本中,需要使用'zh-hans'

更改时区

TIME_ZONE = 'Asia/Shanghai'

在这里还可以修改数据库设置,这里不做修改,使用默认sqlites数据库。

修改完毕后,在命令行中运行如下命令,进行数据库的同步

python manage.py syncdb

运行此命令后,命令行会询问是否创建管理员账户。选择是,因为这将会很有用。

重新运行服务器,访问http://127.0.0.1:8000/admin/,你将看到如下页面

输入刚刚设置的用户名和密码就可以登录到网站的管理界面了。开不开心?当然,现在还没有多少功能。

4.创建应用及后台设置

使用如下命令,创建应用

python manage.py startapp blog

这将创建一个blog目录,如下

blog/
__init__.py
admin.py
models.py
tests.py
views.py

为了激活这个应用,我们编辑mysite/setting.py文件,在INSTALLED_APPS中加入‘blog’,如下

INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog',
)

在blog/models.py中添加如下内容

from django.db import models
from django.contrib import admin class BlogsPost(models.Model):
title = models.CharField(max_length = 150)
body = models.TextField()
timestamp = models.DateTimeField() admin.site.register(BlogsPost)

其中,最后一行是为了在管理界面添加BlogsPsot,以便管理。

运行如下命令,进行数据库同步

python manage.py makemigrations
python manage.py migrate

启动服务器,并登录到网站的管理界面,你将看到

点击Blogs posts后面的增加按钮,创建文章。输入标题,正文和日期时间,并保存你的文章。

接下来设置管理界面中blogs post显示。在blog/models.py中添加如下内容

class BlogPostAdmin(admin.ModelAdmin):
list_display = ('title','timestamp') admin.site.register(BlogPostAdmin)

刷新之前的页面,你将看到

到这里,我们完成了一个简单的博客后台。

5.使用markdown显示你的博客

我们写前端部分,使得我们可以查看之前写的博客。

首先,我们在blog目录下创建templates目录,并添加模板文件index.html。现在我们的blog目录如下

blog/
__pycache__/ ...
migrations/ ...
templates/
index.html
__init__.py
admin.py
models.py
tests.py
views.py

在index.html中添加如下内容

{% for post in blog_list %}
<h2>{{post.title}}</h2>
<p> {{post.timestamp}}</p>
<p> {{post.body}}</p>
{% endfor %}

接下来,我们创建视图函数,将数据库中blogspost渲染到这个模板文件中。在blog/views.py中添加如下内容

from django.shortcuts import render_to_response

from blog.models import BlogsPost

def index(request):
blog_list = BlogsPost.objects.all()
return render_to_response('templates/index.html',{'blog_list':blog_list})

index函数将从数据库中的BlogsPost对象查询出来,渲染到index.html中,并返回index.html。我们现在的任务是将这个函数绑定一个URL。

修改mysite/urls.py,如下

from django.conf.urls import include, url
from django.contrib import admin urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^index/$','blog.views.index'),
]

现在运行服务器,访问http://127.0.0.1:8000/index/,你将看到如下的页面

接下来,对博文添加markdown支持。在blog/views.py修改index函数

from markdown import markdown

def index(request):
blog_list = BlogsPost.objects.all()
for post in blog_list:
post.body=markdown(post.body,extensions=['table'])
return render_to_response('index.html',{'blog_list':blog_list})

修改blog/templates/index.html为

{% for post in blog_list %}
<h2>{{post.title}}</h2>
<p> {{post.timestamp}}</p>
{% autoescape off %}
{{post.body}}
{% endautoescape %}
{% endfor %}

参考[4]介绍了{% autoescape off %}的含义

off的意思是关闭对html的转义,而将off替换成on就表示进行html转义,默认进行html转义。

参考[7]介绍了如何在使得包markdown支持渲染表格。

重新编辑博文,访问http://127.0.0.1:8000/index,我们将看到

6.网站的部署

下载Apache2.4,下载地址

https://www.apachehaus.com/cgi-bin/download.plx#APACHE24VC09

解压之后,修改Apache24/conf/httpd.conf中的以下内容(配合ctrl+f)

Define SRVROOT "D:/Apache24"
ServerRoot "${SRVROOT}"
Listen 0.0.0.0:8000

启动Apache24/bin/httpd.exe程序,访问http://127.0.0.1:8000,会在浏览器上看到Apache的欢迎界面。

下载mod_wsgi,下载地址

http://www.lfd.uci.edu/~gohlke/pythonlibs/#mod_wsgi

使用pip安装下载的whl。安装成功后,在命令行中运行如下命令

mod_wsgi-express module-config

拷贝输出的三行结果,复制到Apache24/conf/httpd.conf的末尾。

将如下内容拷贝到Apache24/conf/httpd.conf的末尾。请将[~]替换为你项目的地址。

#指定myweb项目的wsgi.py配置文件路径
WSGIScriptAlias / [~]/wsgi.py #指定项目路径
WSGIPythonPath [~] <Directory [~]/mysite>
<Files wsgi.py>
Require all granted
</Files>
</Directory> Alias /static [~]/static
<Directory [~]/static>
AllowOverride None
Options None
Require all granted
</Directory>

然后在mysite/setting.py中添加或修改以下内容

DEBUG = False
TEMPLATE_DEBUG = False
ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

完成这些之后,我们还必须收集关于admin的静态文件。

在mysite/setting.py中将以下内容

STATIC_URL = '/static/'
#STATIC_ROOT = os.path.join(BASE_DIR, "static")
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, "templates"),
) STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)

修改为

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "static")
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, "templates"),
)
STATICFILES_DIRS = (
#os.path.join(BASE_DIR, "static"),
)

在manage.py的目录下运行如下命令

python manage.py collectstatic

运行完毕之后,将上一步mysite/setting.py的设置还原。

按照同样的方法在云服务器上部署,效果如图

基本的框架搭建好了,接下来就可以修改网站的逻辑和样式了,对网站进行进一步的完善了。

参考

[1] 看云-django中文文档1.8

[2] 虫师-django快速搭建blog

[3] 一介码农-在django中使用markdown

[4] 追梦者的部落格-django输出html内容

[5] 蜗牛工作站-Django1.7+Apache2.4部署

[6] 小二走刀口-whl文件中找不到mod_wsgi.so文件解决办法

[7] sggmentfault-django如何渲染markdown的表格

本文链接:http://www.superzhang.site/blog/django-build-blog

使用django搭建博客并部署的更多相关文章

  1. 基于Hexo搭建博客并部署到Github Pages

    基于Hexo搭建博客并部署到Github Pages 之前在简书上写东西,觉得自己还是太浮躁.本来打算用Flask自己写一个,以为是微框架就比较简单,naive.HTML.CSS.JS等都要学啊,我几 ...

  2. Django搭建博客网站(四)

    Django搭建博客网站(四) 最后一篇主要讲讲在后台文章编辑加入markdown,已经在文章详情页对markdown的解析. Django搭建博客网站(一) Django搭建博客网站(二) Djan ...

  3. Django搭建博客网站(三)

    Django搭建博客网站(三) 第三篇主要记录view层的逻辑和template. Django搭建博客网站(一) Django搭建博客网站(二) 结构 网站结构决定我要实现什么view. 我主要要用 ...

  4. Django搭建博客网站(二)

    Django搭建自己的博客网站(二) 这里主要讲构建系统数据库Model. Django搭建博客网站(一) model 目前就只提供一个文章model和一个文章分类标签model,在post/mode ...

  5. Django搭建博客记(一)

    这里记录一些 Django 搭建博客遇到的一些问题 参考书籍为 Django by Example, 这里记录与书籍内容不包含的内容. 搭建环境: 阿里云 ECS + CentOS7 一开始搭建的时候 ...

  6. Note | 用Hugo搭建博客并部署到GitHub Pages

    目录 1. 本地搭建 1.1 安装Hugo 1.2 创建站点 1.3 新建页面和文章 1.4 使用主题 1.5 修改配置文件 1.6 预览 2. 部署 之前担心过现有博客平台(如博客园,CSDN)突然 ...

  7. Django搭建博客网站(一)

    Django搭建自己的博客网站(一) 简介 这个系列主要是通过使用Django这个python web框架实现一个简单的个人博客网站.对Django有疑问可以上Django官网查文档. 功能 后台管理 ...

  8. Django 搭建博客记(二)

    当前博客实现的功能 实现 Markdown 语法功能 python 安装 markdown 模块 添加 markdown 过滤 实现代码高亮 通过 CSS 样本实现 分页功能 简单的关于页面和标签分类 ...

  9. Django搭建博客后台

    转载自:http://sanwen8.cn/p/1cboypN.html 首先创建项目和blog应用: 在cmd命令行下,输入: django-admin.py startproject myblog ...

随机推荐

  1. springMVC入门案例

    1.配置文件的web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xs ...

  2. poj 3461 - Oulipo 经典kmp算法问题

    2017-08-13 19:31:47 writer:pprp 对kmp算法有了大概的了解以后,虽然还不够深入,但是已经可以写出来代码,(可以说是背会了) 所以这道题就作为一个模板,为大家使用吧. 题 ...

  3. P4Lang Repository: Switch

    Github Switch Introduction Structure: +-----+ +-----+ +-----+ +-----+ |App a| |App j| |App n| |App z ...

  4. php入门(一)

    一,在HTML中嵌入php代码 先看html的代码: <form action="processorder.php" method="post"> ...

  5. web.config文件配置解决网站上传大文件限制

    Asp.Net网站对上传文件的大小,请求执行的时间都做了限制,上传的文件如果超过限制或者执行上传时间超出, 文件上传都将失败. 因此,需要配置web.config来增加最大文件上传的大小和执行超时时间 ...

  6. 英语词根与单词的说文解字---词根示例1、第10页 st(at)

    英语词根与单词的说文解字---词根示例1.第10页 st(at) 一.总结 一句话总结: 站 state,establish,constitution 英 [ɪ'stæblɪʃ; e-]  美 [ɪˈ ...

  7. Eclipse创建Maven聚合项目

    整体架构图 1.新建父工程 新建maven父项目(用来管理jar包版本),使子系统使用同一个版本的jar包. File->New->Other->Maven Project,打包方式 ...

  8. hdu4305生成树计数

    先预处理出距离,然后判断是否可行,要注意判断是否在一条直线上时判断是在两侧还是一边(wa了四次) double型数据 #include<map> #include<set> # ...

  9. Python3 学习第十四弹: 模块学习六之re模块 + 正则表达式 (转)

    本文转自 AstralWind 的博客:Python正则表达式指南 特来收藏 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有 ...

  10. Ansible 小手册系列 十三(Jinja2)

    用于playbook中的jinja 2过滤器 更改数据格式,其结果是字符串 {{ some_variable | to_json }} {{ some_variable | to_yaml }} 对于 ...