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. JSON and XML Serialization in ASP.NET Web API

    https://docs.microsoft.com/en-us/aspnet/web-api/overview/formats-and-model-binding/json-and-xml-seri ...

  2. mybatis动态sql中的sql标签——抽取可重用的sql片段

    1.用<sql>标签抽取可重用的sql片段 <!-- 抽取可重用的SQL片段,方便后面引用           1.sql抽取,经常将要查询的列名,或者插入用的列名,之后方便引用   ...

  3. shiro对事务的影响

    记一个 No transaction aspect-managed TransactionStatus in scope 错误的解决方法 昨天出现一个BUG,事务没有加回滚成功,修改管理员密码事务没有 ...

  4. 【网络结构】Deep Residual Learning for Image Recognition(ResNet) 论文解析

    目录 0. 论文链接 1. 概述 2. 残差学习 3. Identity Mapping by shortcuts 4. Network Architectures 5. 训练细节 6. 实验 @ 0 ...

  5. You only look once

    计算MAP https://www.zhihu.com/question/53405779 http://tarangshah.com/blog/2018-01-27/what-is-map-unde ...

  6. UVa 11768 格点判定(扩展欧几里得求线段整点)

    https://vjudge.net/problem/UVA-11768 题意: 给定两个点A(x1,y1)和B(x2,y2),均为0.1的整数倍.统计选段AB穿过多少个整点. 思路: 做了这道题之后 ...

  7. htop 比top更好用的top

    安装 sudo apt-get install htop 使用 htop

  8. CSS 左边div固定,右边div自适应

    有时候我们会有这样的需求,如图,aside是导航或者某些链接,右边的main是显示重要的内容,左边需要定宽,右边的main能够自适应剩余的宽度: <!DOCTYPE html PUBLIC &q ...

  9. torch7 调用caffe model 作为pretrain

    torch7 调用caffe model 作为pretrain torch7 caffe preTrain model zoo torch7 通过 loadcaffe 包,可以调用caffe训练得到的 ...

  10. canvas线性变换、颜色和样式选择

    1.应用不同的线型 ctx.lineWidth = value; 线条的宽度,默认为1 ctx.lineCap = type; 设置端点样式, type默认为butt,可选值round,square, ...