使用django搭建博客并部署
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搭建博客并部署的更多相关文章
- 基于Hexo搭建博客并部署到Github Pages
基于Hexo搭建博客并部署到Github Pages 之前在简书上写东西,觉得自己还是太浮躁.本来打算用Flask自己写一个,以为是微框架就比较简单,naive.HTML.CSS.JS等都要学啊,我几 ...
- Django搭建博客网站(四)
Django搭建博客网站(四) 最后一篇主要讲讲在后台文章编辑加入markdown,已经在文章详情页对markdown的解析. Django搭建博客网站(一) Django搭建博客网站(二) Djan ...
- Django搭建博客网站(三)
Django搭建博客网站(三) 第三篇主要记录view层的逻辑和template. Django搭建博客网站(一) Django搭建博客网站(二) 结构 网站结构决定我要实现什么view. 我主要要用 ...
- Django搭建博客网站(二)
Django搭建自己的博客网站(二) 这里主要讲构建系统数据库Model. Django搭建博客网站(一) model 目前就只提供一个文章model和一个文章分类标签model,在post/mode ...
- Django搭建博客记(一)
这里记录一些 Django 搭建博客遇到的一些问题 参考书籍为 Django by Example, 这里记录与书籍内容不包含的内容. 搭建环境: 阿里云 ECS + CentOS7 一开始搭建的时候 ...
- Note | 用Hugo搭建博客并部署到GitHub Pages
目录 1. 本地搭建 1.1 安装Hugo 1.2 创建站点 1.3 新建页面和文章 1.4 使用主题 1.5 修改配置文件 1.6 预览 2. 部署 之前担心过现有博客平台(如博客园,CSDN)突然 ...
- Django搭建博客网站(一)
Django搭建自己的博客网站(一) 简介 这个系列主要是通过使用Django这个python web框架实现一个简单的个人博客网站.对Django有疑问可以上Django官网查文档. 功能 后台管理 ...
- Django 搭建博客记(二)
当前博客实现的功能 实现 Markdown 语法功能 python 安装 markdown 模块 添加 markdown 过滤 实现代码高亮 通过 CSS 样本实现 分页功能 简单的关于页面和标签分类 ...
- Django搭建博客后台
转载自:http://sanwen8.cn/p/1cboypN.html 首先创建项目和blog应用: 在cmd命令行下,输入: django-admin.py startproject myblog ...
随机推荐
- Tornado异步(2)
Tornado异步 因为epoll主要是用来解决网络IO的并发问题,所以Tornado的异步编程也主要体现在网络IO的异步上,即异步Web请求. 1. tornado.httpclient.Async ...
- 爬虫之Handler处理器 和 自定义Opener
Handler处理器 和 自定义Opener opener是 urllib2.OpenerDirector 的实例,我们之前一直都在使用的urlopen,它是一个特殊的opener(也就是模块帮我们构 ...
- codeforce 589B枚举
2017-08-25 12:00:53 writer:pprp 很简单的枚举,但是我调试了很长时间,出现各种各样的问题 /* theme:cf 589B writer:pprp declare:枚举 ...
- linux一键安装nginx脚本
#!/bin/sh echo "----------------------------------start install nginx ------------------------- ...
- Flash访问模块FDS用法及常见问题—nRF5 SDK模块系列一
FDS,全称Flash Data Storage,用来访问芯片内部Flash的.当你需要把数据存储在Flash中,或者读取Flash中的用户数据,或者更新或者删除Flash中的数据,那么FDS模块是你 ...
- python中enumerate()函数用法
python中enumerate()函数用法 先出一个题目:1.有一 list= [1, 2, 3, 4, 5, 6] 请打印输出:0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 打印输 ...
- Educational Codeforces Round 40 I. Yet Another String Matching Problem
http://codeforces.com/contest/954/problem/I 给你两个串s,p,求上一个串的长度为|p|的所有子串和p的差距是多少,两个串的差距就是每次把一个字符变成另一个字 ...
- HDU 5694 分治+规律
http://acm.hdu.edu.cn/showproblem.php?pid=5694 此题一开始我也找到了规律,也知道是分治可是,,,想的太复杂了没写开, 我一直想的通过L,R两个参数分治,可 ...
- pyhon SyntaxError: Non-ASCII character '\xe8' in file xxx on line xx, but no encoding
import math if __name__ == '__main__': name1 = raw_input("请输入您的编号:") print name1 完整的 ...
- Linux命令 ls -l 输出内容含义详解
Linux命令 ls -l s输出内容含义详解 1. ls 只显示文件名或者文件目录 2. ls -l(这个参数是字母L的小写,不是数字1) 用来查看详细的文件资料 在某个目录下键入ls -l可 ...