Python采用Django開發(fā)自己的博客系統(tǒng)
好久之前就想做一下自己的博客系統(tǒng)了,但是在網(wǎng)上查了查好像是需要會(huì)一些Node.js的相關(guān)知識(shí),而且還要安裝辣么多的庫(kù)什么的,就不想碰了。但是我遇到了Django這么一款神器,沒(méi)想到我的博客系統(tǒng)就這么建立起來(lái)了。雖然是最基礎(chǔ)的類型。但是也算是成功了,這篇博客比較適合對(duì)Django有了一定了解的童鞋,如果是新手的話,建議先看一下django的基礎(chǔ)知識(shí)點(diǎn)再來(lái)做實(shí)驗(yàn),這樣效率更高!
好了,話不多說(shuō),開始吧。
搭建框架
•創(chuàng)建項(xiàng)目及應(yīng)用
搭建框架的意思,就是安裝Django以及做好相關(guān)的配置。因?yàn)槲沂窃赑yCharm下進(jìn)行創(chuàng)建的,所以工具代替我做了很多事情。但是底層也無(wú)非是下面幾行代碼:
創(chuàng)建一個(gè)Django項(xiàng)目,名為MyDjango
django-admin startproject MyDjango
創(chuàng)建一個(gè)Django應(yīng)用,名為MyBlog。這里應(yīng)該注意的是應(yīng)用隸屬于項(xiàng)目的子集。通俗的來(lái)說(shuō)應(yīng)用文件夾是作為項(xiàng)目文件夾的子集而存在的。
django-admin startapp MyBlog
•創(chuàng)建數(shù)據(jù)庫(kù)及底層模型
我這里簡(jiǎn)單的以默認(rèn)的sqlite3數(shù)據(jù)庫(kù)作為了我的博客系統(tǒng)的數(shù)據(jù)庫(kù)了,當(dāng)然你也可以自己制定需要的數(shù)據(jù)庫(kù),一般來(lái)說(shuō)sqlite3都能滿足需求。在setting.py里面可以這樣進(jìn)行設(shè)置。
# Database
# https://docs.djangoproject.com/en/1.9/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': 'MyBlog.db',
'USER':'',
'PASSWORD':'',
'HOST':'',
'PORT':'',
}
}
建好了數(shù)據(jù)庫(kù),接下來(lái)就是模型的創(chuàng)建了。因?yàn)槲覄?chuàng)建的是博客系統(tǒng),所以必不可少的要發(fā)布關(guān)于博客的內(nèi)容,于是需要有標(biāo)題,內(nèi)容,發(fā)布時(shí)間這些屬性,詳情如models.py文件
from __future__ import unicode_literals from django.contrib import admin from django.db import models # create the blog model class BlogPost(models.Model): title = models.CharField(max_length=150) body = models.TextField() timestamp = models.DateTimeField() def __unicode__(self): return self.title
由于需要管理員對(duì)發(fā)布的博客進(jìn)行管理,所以我們要對(duì)發(fā)布的博客設(shè)置一個(gè)管理模型
# set the admin page for BlogPost
class BlogPostAdmin(admin.ModelAdmin):
list_display = ('title','timestamp')
# register the model (especially important
admin.site.register(BlogPost)
所以整個(gè)models.py文件里面就應(yīng)該是這樣的了。
from __future__ import unicode_literals
from django.contrib import admin
from django.db import models
# create the blog model
class BlogPost(models.Model):
title = models.CharField(max_length=150)
body = models.TextField()
timestamp = models.DateTimeField()
def __unicode__(self):
return self.title
# set the admin page for BlogPost
class BlogPostAdmin(admin.ModelAdmin):
list_display = ('title','timestamp')
# register the model (especially important
admin.site.register(BlogPost)
接下來(lái),就是同步一下數(shù)據(jù)庫(kù)和模型之間的聯(lián)系了。如果不做同步操作的話,就很有可能報(bào)出
django.db.utils.OperationalError: unable to open database file
而且這里也是很重要的一個(gè)環(huán)節(jié)。那就是關(guān)于Django版本的問(wèn)題,我之前就在這上面栽過(guò)一次。
django < 1.7 時(shí):
python manage.py syncdb
django > 1.7 時(shí):
python manage.py makemigrations
python manage.py migrate
完善MVC模式
其實(shí)前面的步驟而言,我們已經(jīng)是完成了model這個(gè)模塊的功能了,接下來(lái)就是做好視圖的映射就可以了。
•V(views.py)視圖層
我們需要在這個(gè)文件里面定義好底層的邏輯處理。這決定著要返回給用戶一個(gè)什么樣的response。至于采用哪種渲染方式,大家就不要在這上面浪費(fèi)不必要的時(shí)間了。render_to_response就足夠了。
# create the view for blog show
def myBlogs(request):
blog_list = BlogPost.objects.all()
return render_to_response('BlogTemplate.html',{'blog_list':blog_list})
這里面用到了模板文件,還傳給了模板一個(gè)列表類型的參數(shù),這些我們待會(huì)再敘。
•C(controller)urls.py
可以說(shuō)這個(gè)文件將Django各部分松耦合的功能銜接到了一起,完成了整個(gè)項(xiàng)目的運(yùn)轉(zhuǎn)的非核心的核心了,是關(guān)于如何映射的邏輯的處理。接下來(lái)我們就將我們的博客系統(tǒng)設(shè)置一下吧。
from django.conf.urls import url from django.contrib import admin from MyBlog.views import * urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^myBlogs/$',myBlogs), ]
關(guān)于如何映射,我的上一篇文章里面有詳細(xì)的介紹,PyCharm開發(fā)Django基礎(chǔ)配置。有興趣的可以參考一下。好了,這次我們?cè)谕瓿闪薬dmin管理員用戶的設(shè)置之后,就可以運(yùn)行我們的程序了。
python manage.py runserver
出現(xiàn)了:
Performing system checks... System check identified no issues (0 silenced). June 05, 2016 - 11:39:27 Django version 1.9.6, using settings 'MyDjango.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.
這時(shí)就可以在瀏覽器中輸入
http://127.0.0.1:8000/admin,登陸成功后可以點(diǎn)擊下面的Blog Posts編輯博文了。然后點(diǎn)擊SAVE 按鈕,就可以發(fā)布我們的博客。接下來(lái)在瀏覽器中輸入
http://127.0.0.1:8000/myBlogs/ 訪問(wèn)我們的博客系統(tǒng)了。
這樣就實(shí)現(xiàn)了我們的博客系統(tǒng)的建立了。但是由于沒(méi)有添加樣式,所以看起來(lái)不是很好看,所以我們要添加以下模板的樣式。
模板配置
接著剛才的繼續(xù),關(guān)于模板,這里面可謂是有著很深的設(shè)計(jì)哲學(xué)。了解過(guò)的大家肯定都會(huì)有感觸,我就不多說(shuō)了。
接下來(lái)就為我們的博客系統(tǒng)設(shè)置一下模板吧。
•父模板base.html
按照django對(duì)模板的繼承設(shè)置,我們可以制作一個(gè)父模板。如下:
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>標(biāo)題</title>
</head>
<style type="text/css">
body{
color: #efd;
background: #BBBBBB;
padding: 12px 5em;
margin:7px;
}
h1{
padding: 2em;
background: #675;
}
h2{
color: #85F2F2;
border-top: 1px dotted #fff;
margin-top:2em;
}
p{
margin:1em 0;
}
</style>
<body>
<h1>XX博文</h1>
<h3>小生不才,但求簡(jiǎn)約!</h3>
{% block content %}
{% endblock %}
</body>
</html>
•然后就是子模板BlogTemplate.html
{% extends "base.html" %}
{% block content %}
{% for post in blog_list %}
<h2>{{ post.title }}</h2>
<p>{{ post.timestamp }}</p>
<p>{{ post.body }}</p>
{% endfor %}
{% endblock %}
需要注意的就是模板中的模板標(biāo)簽以及模板變量都應(yīng)該與views.py文件對(duì)應(yīng)的函數(shù)中的字典變量相一致,否則django雖然不會(huì)報(bào)錯(cuò),但也是不會(huì)顯示數(shù)據(jù)的。
接下來(lái)刷新一下,輸入http://127.0.0.1:8000/admin/
點(diǎn)擊add按鈕,開始添加你的博文吧。


然后在瀏覽器中輸入
http://127.0.0.1:8000/myBlogs/.你就可以看到你的博客列表了,如圖

大家可能已經(jīng)看到了,問(wèn)題就出在點(diǎn)擊標(biāo)題沒(méi)有進(jìn)入到相關(guān)的詳情頁(yè)面,那是因?yàn)檫€沒(méi)有添加這個(gè)功能呢。(^__^) 嘻嘻……
總結(jié)
今天一起做了一個(gè)簡(jiǎn)單的博客系統(tǒng),雖然外觀看起來(lái)并不是很好看,但是內(nèi)容什么的差不多就是這樣了。還有很多的地方需要完善。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Pycharm以root權(quán)限運(yùn)行腳本的方法
今天小編就為大家分享一篇Pycharm以root權(quán)限運(yùn)行腳本的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-01-01
基于Python爬蟲采集天氣網(wǎng)實(shí)時(shí)信息
這篇文章主要介紹了基于Python爬蟲采集天氣網(wǎng)實(shí)時(shí)信息,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
Python使用pandas模塊實(shí)現(xiàn)表之間的關(guān)聯(lián)
在數(shù)據(jù)分析和處理中,表之間的關(guān)聯(lián)是非常常見(jiàn)的操作,本文為大家介紹了pandas中實(shí)現(xiàn)表之間的關(guān)聯(lián)有四種方式,感興趣的小伙伴可以了解一下2023-07-07
pygame實(shí)現(xiàn)俄羅斯方塊游戲(基礎(chǔ)篇3)
這篇文章主要介紹了pygame實(shí)現(xiàn)俄羅斯方塊游戲基礎(chǔ)的第3篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
Python灰度變換中灰度切割分析實(shí)現(xiàn)
灰度變換是指根據(jù)某種目標(biāo)條件按一定變換關(guān)系逐點(diǎn)改變?cè)磮D像中每個(gè)像素灰度值的方法。目的是改善畫質(zhì),使圖像顯示效果更加清晰。圖像的灰度變換處理是圖像增強(qiáng)處理技術(shù)中的一種非常基礎(chǔ)、直接的空間域圖像處理方法,也是圖像數(shù)字化軟件和圖像顯示軟件的一個(gè)重要組成部分2022-10-10
解決win7操作系統(tǒng)Python3.7.1安裝后啟動(dòng)提示缺少.dll文件問(wèn)題
這篇文章主要介紹了解決win7操作系統(tǒng)Python3.7.1安裝后啟動(dòng)提示缺少.dll文件問(wèn)題,本文給大家提供兩種解決方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-07-07
pandas object格式轉(zhuǎn)float64格式的方法
下面小編就為大家分享一篇pandas object格式轉(zhuǎn)float64格式的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-04-04

