2017/8/31 18:27:59

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

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

1.安装django

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

  1. pip install django==1.8

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

  1. >>> import django
  2. >>> django.get_version()
  3. '1.8'

这说明,django安装成功了。

2.创建项目mysite

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

  1. python django-admin.py startproject mysite

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

  1. mysite/
  2. manage.py
  3. mysite/
  4. __init__.py
  5. setting.py
  6. urls.py
  7. wsgi.py

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

  1. python manage.py runserver

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

3.编辑setting.py

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

设置语言版本

  1. LANGUAGE_CODE = 'zh-cn'

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

更改时区

  1. TIME_ZONE = 'Asia/Shanghai'

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

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

  1. python manage.py syncdb

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

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

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

4.创建应用及后台设置

使用如下命令,创建应用

  1. python manage.py startapp blog

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

  1. blog/
  2. __init__.py
  3. admin.py
  4. models.py
  5. tests.py
  6. views.py

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

  1. INSTALLED_APPS = (
  2. 'django.contrib.admin',
  3. 'django.contrib.auth',
  4. 'django.contrib.contenttypes',
  5. 'django.contrib.sessions',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. 'blog',
  9. )

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

  1. from django.db import models
  2. from django.contrib import admin
  3. class BlogsPost(models.Model):
  4. title = models.CharField(max_length = 150)
  5. body = models.TextField()
  6. timestamp = models.DateTimeField()
  7. admin.site.register(BlogsPost)

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

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

  1. python manage.py makemigrations
  2. python manage.py migrate

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

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

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

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

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

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

5.使用markdown显示你的博客

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

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

  1. blog/
  2. __pycache__/ ...
  3. migrations/ ...
  4. templates/
  5. index.html
  6. __init__.py
  7. admin.py
  8. models.py
  9. tests.py
  10. views.py

在index.html中添加如下内容

  1. {% for post in blog_list %}
  2. <h2>{{post.title}}</h2>
  3. <p> {{post.timestamp}}</p>
  4. <p> {{post.body}}</p>
  5. {% endfor %}

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

  1. from django.shortcuts import render_to_response
  2. from blog.models import BlogsPost
  3. def index(request):
  4. blog_list = BlogsPost.objects.all()
  5. return render_to_response('templates/index.html',{'blog_list':blog_list})

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

修改mysite/urls.py,如下

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

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

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

  1. from markdown import markdown
  2. def index(request):
  3. blog_list = BlogsPost.objects.all()
  4. for post in blog_list:
  5. post.body=markdown(post.body,extensions=['table'])
  6. return render_to_response('index.html',{'blog_list':blog_list})

修改blog/templates/index.html为

  1. {% for post in blog_list %}
  2. <h2>{{post.title}}</h2>
  3. <p> {{post.timestamp}}</p>
  4. {% autoescape off %}
  5. {{post.body}}
  6. {% endautoescape %}
  7. {% endfor %}

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

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

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

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

6.网站的部署

下载Apache2.4,下载地址

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

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

  1. Define SRVROOT "D:/Apache24"
  2. ServerRoot "${SRVROOT}"
  3. Listen 0.0.0.0:8000

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

下载mod_wsgi,下载地址

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

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

  1. mod_wsgi-express module-config

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

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

  1. #指定myweb项目的wsgi.py配置文件路径
  2. WSGIScriptAlias / [~]/wsgi.py
  3. #指定项目路径
  4. WSGIPythonPath [~]
  5. <Directory [~]/mysite>
  6. <Files wsgi.py>
  7. Require all granted
  8. </Files>
  9. </Directory>
  10. Alias /static [~]/static
  11. <Directory [~]/static>
  12. AllowOverride None
  13. Options None
  14. Require all granted
  15. </Directory>

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

  1. DEBUG = False
  2. TEMPLATE_DEBUG = False
  3. ALLOWED_HOSTS = ['127.0.0.1', 'localhost']

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

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

  1. STATIC_URL = '/static/'
  2. #STATIC_ROOT = os.path.join(BASE_DIR, "static")
  3. TEMPLATE_DIRS = (
  4. os.path.join(BASE_DIR, "templates"),
  5. )
  6. STATICFILES_DIRS = (
  7. os.path.join(BASE_DIR, "static"),
  8. )

修改为

  1. STATIC_URL = '/static/'
  2. STATIC_ROOT = os.path.join(BASE_DIR, "static")
  3. TEMPLATE_DIRS = (
  4. os.path.join(BASE_DIR, "templates"),
  5. )
  6. STATICFILES_DIRS = (
  7. #os.path.join(BASE_DIR, "static"),
  8. )

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

  1. 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. webservice使用注解修改WSDL内容

    首先看我们没有修改前的WSDL内容 此时服务端的类 修改后的 注解如下 package com.xiaostudy; import javax.jws.WebMethod; import javax. ...

  2. Pandas 高级应用 数据分析

    深入pandas 数据处理 三个阶段 数据准备 数据转化 数据聚合 数据准备 加载 组装 合并 - pandas.merge() 拼接 - pandas.concat() 组合 - pandas.Da ...

  3. Pandas 数据分析基础

    Pandas 安装 anaconda 安装: conda list pandas 查看是否已经安装 conda install pandas conda update pandas pip 安装 pi ...

  4. G - 锘爷考驾照

    2017-07-17 11:56:06 writer:pprp 题目描述 大家都知道,锘爷是XDUdp第一人,所以锘爷决定要去考驾照!(这很有逻辑吧),他为了一次考到驾照,于是买了一辆越野车从学校开回 ...

  5. spring boot 之Rabbitmq 基本配置

    /* * Copyright (c) 2017 4PX Information Technology Co.,Ltd. All rights reserved. */package com.fpx.p ...

  6. js从一个select选择数据添加到另一个select(包括移除)

    一.实现效果 二.要求 1.选中左侧的菜单,点击“>>”,该菜单(1项或多项选中的)将添加到右侧菜单 2.选中右侧菜单,点击“<<”,则移除选中的菜单 3.点击“>> ...

  7. 【Error】local variable 'xxx' referenced before assignment

    此种错误涉及到变量的作用域,即全局变量和局部变量的操作. 总结如下: 内部函数,不修改全局变量可以访问全局变量 内部函数,修改同名全局变量,则python会认为它是一个局部变量 在内部函数修改同名全局 ...

  8. field字段错位手动更改方法

    update tbprotocolex set field='1' where name='ICMP';update tbprotocolex set field='1' where name='DN ...

  9. 【转】Fork/Join框架测试

    Fork/Join框架介绍 下面使用该框架计算0-50000000000的和,并比较普通计算方法.Fork/Join框架.Java8新特性三种计算方式的计算时间: import java.time.D ...

  10. 014——数组(十四)array_reduce array_slice array_splice array_sum

    <?php /** */ //array_reduce()递归的用回调函数递归的对数组元素进行处理,返回处理后的值 /*$arr=array(1,2,3,4,5); function func( ...