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. think in java

    1.public private protected

  2. 【bzoj2563】阿狸和桃子的游戏(贪心+构造)

    题目传送门:bzoj2563 先膜拜一波PoPoQQQ的题解:BZOJ 2563 阿狸和桃子的游戏 贪心 其实我们可以这样看:把一条边的权值均分到两个端点,那么取到两个端点就能得到这条边的边权,如果只 ...

  3. nginx作为TCP反向代理

    基于windows环境 基于nginx1.12.2版本 1. 解压nginx 2. 修改conf配置 # 打开conf/nginx,conf文件,写入以下配置 # upstream backend 里 ...

  4. 理解多线程管理类 CWorkQueue

    有些人会觉得多线程无非是,有多少任务就启动多少线程,CreadThread,执行完了自己结束就释放资源了,其实不然.多线程是需要管理的,线程的启动.执行.等待和结束都需要管理,线程间如何通信,如何共享 ...

  5. 面向对象-PHP面向对象的特性

     1.类和公有化 class Computer {     //什么叫做类内,就是创建类的花括号内的范围叫做类内,其他地方则类外.     //public 是对字段的公有化,这个字段类外即可访问,赋 ...

  6. pip 批量更新

    1. pip3 list --outdated >> requests  现将要更新的列表写入requests 2.对文件中的数据进行处理 Package        Version   ...

  7. linux exec和xargs的区别

    -exec     1.参数是一个一个传递的,传递一个参数执行一次,效率低     2.文件名有空格等特殊字符也能处理 -xargs      1.一次将参数传给命令,可以使用-n控制参数个数     ...

  8. Linux命令详解-hwclock/chock

    hwclock命令可以用来显示/设置硬件时钟命令. 在Linux中有硬件时钟与系统时钟等两种时钟.硬件时钟是指主机板上的时钟设备,也就是通常可在BIOS画面设定的时钟.系统时钟则是指kernel中 的 ...

  9. 记录selenium操作

    # -*- coding: utf-8 -*- # coding:utf-8 必须在第一行才能支持中文注释 #!/usr/bin/python # android-build.py # Build a ...

  10. day37 爬虫2(web微信、高性能相关、Scrapy)

    s16day37 爬虫2 参考博客:http://www.cnblogs.com/wupeiqi/articles/6229292.html 课堂代码:https://github.com/liyon ...