背景
好吧所宰,我承認(rèn)是我比較蛋疼,直接下了Django的最新版,然后好像很多東西都改了疯搅,比如生成sqlite數(shù)據(jù)庫(kù)的時(shí)候表制,老版本用的是python manage.py syncdb健爬,但是在1.9版本中移除了這個(gè)命令。最頭疼的是現(xiàn)在網(wǎng)絡(luò)上的教程說(shuō)的都是1.8或者更老版本的Django么介。于是花了點(diǎn)時(shí)間看了Django的官方文檔娜遵,結(jié)合蟲(chóng)師的教程簡(jiǎn)單寫(xiě)了一下
操作系統(tǒng):Mac OS X EI Caption
Python版本:3.4
Django版本:1.9
IDE:PyCharm
新建工程
首先在PyCharm中新建一個(gè)Django項(xiàng)目,會(huì)自動(dòng)幫你配置好工程的文件壤短,比如我的工程名字叫BlogC设拟。
manage.py ----- Django項(xiàng)目里面的工具,通過(guò)它可以調(diào)用django shell和數(shù)據(jù)庫(kù)等久脯。
settings.py ---- 包含了項(xiàng)目的默認(rèn)設(shè)置纳胧,包括數(shù)據(jù)庫(kù)信息,調(diào)試標(biāo)志以及其他一些工作的變量帘撰。
urls.py ----- 負(fù)責(zé)把URL模式映射到應(yīng)用程序躲雅。
創(chuàng)建一個(gè)應(yīng)用
在PyCharm命令行(以下簡(jiǎn)稱命令行)中輸入命令python manage.py startapp easyblog,命令的作用就是創(chuàng)建一個(gè)名字叫做easyblog的應(yīng)用骡和,如果是其他方式相赁,就用命令行工具進(jìn)入到BlogC的根目錄下(就是你打ls會(huì)看到manage.py這個(gè)文件的目錄)輸入這個(gè)命令
數(shù)據(jù)庫(kù)模型
在命令行中輸入python manage.py migrate,就會(huì)自動(dòng)根據(jù)Django現(xiàn)有的模型建立起一套強(qiáng)大的CMS(這里與老版本不一樣的內(nèi)容是:老版本使用的是syncdb這個(gè)命令慰于,而且老版本會(huì)自動(dòng)創(chuàng)建用戶)钮科。輸入完命令后你就會(huì)看到新建了一個(gè)db.sqlite的文件,這個(gè)就是你的數(shù)據(jù)庫(kù)文件(當(dāng)然你也可以用其他數(shù)據(jù)庫(kù))婆赠。這時(shí)一個(gè)CMS系統(tǒng)已經(jīng)搭建起來(lái)了绵脯,輸入python manage.py runserver啟動(dòng)Django服務(wù)器,然后進(jìn)入127.0.0.1:8000/admin就可以看到你的CMS系統(tǒng)了休里,不過(guò)現(xiàn)在還沒(méi)有用戶蛆挫。輸入命令python manage.py createsuperuser就會(huì)讓你輸入用戶名、密碼和郵箱妙黍。
SvenWengdeMacBook-Pro:BlogC svenweng$ python manage.py createsuperuser
Username (leave blank to use 'svenweng'):
Email address: ****@qq.com
Password:
Password (again):
Superuser created successfully.
現(xiàn)在用這個(gè)用戶就可以進(jìn)入CMS系統(tǒng)了
定義博客的數(shù)據(jù)庫(kù)模型
我們網(wǎng)站的CMS已經(jīng)做好了悴侵,現(xiàn)在要定義我們自己的模型。
easyblog/models.py
from django.db import models
from django.contrib import admin
class BlogPost(models.Model):
title = models.CharField(max_length=200)
body = models.TextField()
timestamp = models.DateTimeField()
admin.site.register(BlogPost)
上面的代碼幫我們定義了一個(gè)簡(jiǎn)單的數(shù)據(jù)內(nèi)容∈眉蓿現(xiàn)在我們要讓數(shù)據(jù)庫(kù)發(fā)生變化可免。執(zhí)行以下命令
python manage.py makemigrations easyblog
python manage.py sqlmigrate easyblog 0001
python manage.py migrate
按順序執(zhí)行命令抓于,就會(huì)把我們新增的models生成。這個(gè)時(shí)候進(jìn)入CMS就可以看到多了一個(gè)group浇借,在里面輸入標(biāo)題捉撮,內(nèi)容和時(shí)間,保存即可妇垢。
視圖
寫(xiě)完數(shù)據(jù)模型后巾遭,我們寫(xiě)視圖函數(shù),讓我們的網(wǎng)站能夠展示出來(lái)闯估。
easyblog/views.py
from django.shortcuts import render
from easyblog.models import BlogPost
def index(request):
blog_list = BlogPost.objects.all()
return render(request, 'index.html', {'blog_list': blog_list})
def index表示定義一個(gè)index的視圖函數(shù)灼舍,BlogPost.objects.all()就表示我們剛剛定義的模型類BlogPost返回所有數(shù)據(jù),我們?cè)贑MS插入的文章就會(huì)全部返回給blog_list睬愤。最后就是把視圖函數(shù)處理的內(nèi)容返回給模版index.html。
模版
在模版文件templates中新建index.html纹安。根據(jù)視圖函數(shù)返回的數(shù)據(jù)尤辱,我們來(lái)編寫(xiě)這個(gè)index.html模版
templates/index.html
{% for blog in blog_list %}
<h2>{{ blog.title }}</h2>
<p>{{ blog.timestamp }}</p>
<p>{{ blog.body }}</p>
{% endfor%}
視圖函數(shù)最后的{'blog_list': blog_list}就表示把blog_list的內(nèi)容賦值給‘blog_list’,所以在模版中我們要有‘blog_list’這個(gè)變量厢岂,用for來(lái)迭代光督,把數(shù)據(jù)全部打出來(lái)
地址
內(nèi)容我們已經(jīng)寫(xiě)好了,現(xiàn)在要通過(guò)一個(gè)地址定位到我們寫(xiě)的網(wǎng)站塔粒。在BlogC中已經(jīng)有一個(gè)urls.py文件结借,這個(gè)文件就是把定位到我們網(wǎng)站的地址。
BlogC/urls.py
from django.conf.urls import url, include
from django.contrib import admin
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'^easyblog/', include('easyblog.urls')),
]
上面的代碼就表示我們輸入地址后帶有easyblog的鏈接全部會(huì)跳轉(zhuǎn)到easyblog/urls.py這個(gè)文件中卒茬,我們需要新建這個(gè)文件船老,然后輸入下面的代碼
easyblog/urls.py
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^$', views.index, name='index'),
]
這個(gè)就表示我們輸入地址后帶有easyblog的網(wǎng)址鏈接的視圖。url的參數(shù)圃酵,第一個(gè)是一個(gè)名稱適配的正則柳畔。這里表示為空,第二個(gè)參數(shù)就是視圖函數(shù)的地址了郭赐,name表示視圖函數(shù)的名稱薪韩。
完工
我們簡(jiǎn)單的blog系統(tǒng)就搭建起來(lái)了,現(xiàn)在需要看看結(jié)果是什么捌锭,運(yùn)行python manage.py runserver俘陷,進(jìn)入127.0.0.1:8000/easyblog。就可以看到我們剛剛寫(xiě)的網(wǎng)站了观谦。
優(yōu)化
我們發(fā)現(xiàn)我們寫(xiě)的網(wǎng)站很丑拉盾。這時(shí)你需要給你的模版加上一些css樣式,新建一個(gè)base.html模版豁状,輸入下列代碼
templates/base.html
<html>
<style type="text/css">
body{color:#efd;background:#453;padding:0 5em;margin:0}
h1{padding:2em 1em;background:#675;text-align: center}
h2{color:#bf8;border-top:1px dotted #fff;margin-top:2em}
p{margin:1em 0}
</style>
<body>
<h1>點(diǎn)點(diǎn)寒彬的blog</h1>
<h3>精通各大語(yǔ)言的hello world!</h3>
{% block content %}
{% endblock %}
</body>
</html>
然后把我們之前的index.html代碼改為這樣
templates/index.html
{% extends "base.html" %}
{% block content %}
{% for blog in blog_list %}
<h2>{{ blog.title }}</h2>
<p>{{ blog.timestamp }}</p>
<p>{{ blog.body }}</p>
{% endfor%}
{% endblock %}
好了盾剩,再次進(jìn)入我們的網(wǎng)站看看雷激。
放一張我自己寫(xiě)的樣式圖
后記
這里搭建的只是一個(gè)很簡(jiǎn)單很簡(jiǎn)單的博客系統(tǒng),它沒(méi)有登陸告私,分類等博客的相關(guān)要素屎暇,需要你自己去拓展。CSS真是一個(gè)不錯(cuò)的東西驻粟。值得去看看根悼。