2017/8/31 18:27:59html
为了之后参考的方便,在这里总结一下django搭建博客网站的主要步骤。如下大部分的内容,参考自Django中文文档 - 看云。前端
须要强调的是,这里使用的django版本是1.8。这是由于,不一样版本之间的django之间存在必定的差别。python
1.安装django
在命令行中使用以下命令安装djangoweb
pip install django==1.8
安装结束后,在命令行中输入python,进入python命令行。而后尝试导入djangosql
>>> import django >>> django.get_version() '1.8'
这说明,django安装成功了。数据库
2.建立项目mysite
在命令行中,使用cd命令进入你想存储代码的目录,而后运行以下命令express
python django-admin.py startproject mysite
因而,当前目录下创建了一个mysite目录,结构以下apache
mysite/ manage.py mysite/ __init__.py setting.py urls.py wsgi.py
从外层的mysite目录切换进去,经过以下命令,咱们就能运行服务器django
python manage.py runserver
在http://127.0.0.1:8000/,咱们将看到以下页面segmentfault
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的表格