使用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

posted on 2017-12-06 11:11  SuperZhang828  阅读(1272)  评论(0编辑  收藏  举报

导航