2017/8/31 18:27:59html
爲了之後參考的方便,在這裏總結一下django搭建博客網站的主要步驟。如下大部分的內容,參考自Django中文文檔 - 看雲。前端
須要強調的是,這裏使用的django版本是1.8。這是由於,不一樣版本之間的django之間存在必定的差別。python
在命令行中使用以下命令安裝djangoweb
pip install django==1.8
安裝結束後,在命令行中輸入python,進入python命令行。而後嘗試導入djangosql
>>> import django >>> django.get_version() '1.8'
這說明,django安裝成功了。數據庫
在命令行中,使用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
在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/,你將看到以下頁面
輸入剛剛設置的用戶名和密碼就能夠登陸到網站的管理界面了。開不開心?固然,如今尚未多少功能。
使用以下命令,建立應用
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)
刷新以前的頁面,你將看到
到這裏,咱們完成了一個簡單的博客後臺。
咱們寫前端部分,使得咱們能夠查看以前寫的博客。
首先,咱們在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,咱們將看到
下載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的表格