Django:快速搭建簡單的Blog 分類: 軟件插件學習 2015-06-10 18:07 35人閱讀 評論(0) 收藏

一,建立項目css

1, 爲blog建立名爲mysite的工程項目:html

 django-admin.py startproject mysite

2, 項目結構以下:python

  mysite
    ├── manage.py
    └── mysite
        ├── __init__.py
        ├── settings.py
        ├── urls.py
        └── wsgi.py
  • manage.py —– Django項目裏面的工具,經過它能夠調用django shell和數據庫等。mysql

  • settings.py —- 包含了項目的默認設置,包括數據庫信息,調試標誌以及其餘一些工做的變量。sql

  • urls.py —– 負責把URL模式映射到應用程序。shell

二 ,運行開發服務器數據庫

要立刻查看django項目應用的運行,能夠使用Django項目裏的mange.pydjango

 切換到工程目錄,執行運行服務器命令:ubuntu

python manage.py runserver

完成:瀏覽器

打開瀏覽器,輸入訪問地址:127.0.0.1:8000

三,建立Blog應用

python manage.py startapp blog

blog應用文件結構以下:

├── blog
│   ├── admin.py
│   ├── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py

四,設計你的Model

在blog目錄下的models.py是blog應用的核心文件之一,是定義blog數據結構的地方。

用編輯器打開models.py

新添加BlogPost類,代碼以下:

from django.db import models

# Create your models here.
class BlogPost(models.Model):
    title = models.CharField(max_length = 150)
    body = models.TextField()
    timestamp = models.DateTimeField()

BlogPost類是django.db.models.Model的一個子類 。它有變量title(blog的標題),body(blog的內容部分),timestamp(blog的發表時間)。

五,設置數據庫

 Dajango支持主流的數據庫服務器(MySQL,PostgreSQL,Oracle和MSSQL),但本項目使用SQLite,這裏之須要經過一條簡單的命令能夠建立SQLite數據庫。

建立數據庫:

切換到工程主目錄mysite/下,執行以下命令:

python manage.py syncdb 

 出現下面的提示,輸入yes,而後按照提示輸入相關的信息。完成後會生成一個數據庫文件db.sqlite3

六,設置自動admin應用

1,打開mysite/mysite/urls.py,取消註釋url(r’^admin/’, include(admin.site.urls))

2,編輯mysite/mysite/settings.py,在INSTALLED_APPS裏面添加blog應用。

    添加後的代碼以下:

# Application definition INSTALLED_APPS = (    'django.contrib.admin',    'django.contrib.auth',    'django.contrib.contenttypes',    'django.contrib.sessions',    'django.contrib.messages',    'django.contrib.staticfiles',    'blog', ) 

 

2,修改mysite/blog/models.py

在最後添加一行代碼:

admin.site.register(BlogPost) 

 models.py完整的代碼以下:

from django.db import models
from django.contrib import admin

# Create your models here.
class BlogPost(models.Model):
    title = models.CharField(max_length = 150)
    body = models.TextField()
    timestamp = models.DateTimeField()

admin.site.register(BlogPost)

3 ,打開瀏覽器,輸入http://127.0.0.1:8000/admin/,輸入剛纔建立數據庫時候填寫的賬號就能進入admin界面。

七,試用admin

1, 點擊Blog Posts右側的Add 按鈕,添加一個帖子。

2,讓admin的BlogPost界面更加美觀

修改blog應用的models.py,爲它添加一個admin.ModelAdmin的子類BlogPostAdmin.以列表形式顯示BlogPost的標題和時間。

from django.db import models
from django.contrib import admin

# Create your models here.
class BlogPost(models.Model):
    title = models.CharField(max_length = 150)
    body = models.TextField()
    timestamp = models.DateTimeField()

class BlogPostAdmin(admin.ModelAdmin):
    list_display = ('title','timestamp')

admin.site.register(BlogPost,BlogPostAdmin)

八,創建Blog的公共部分

從Django的角度看,一個頁面具備三個典型的組件:

  • 一個模板(template):模板負責把傳遞進來的信息顯示出來。

  • 一個視圖(viw):視圖負責從數據庫獲取須要顯示的信息。

  • 一個URL模式:它負責把收到的請求和你的試圖函數匹配,有時候也會向視圖傳遞一些參數。

1,建立模板

    在blog目錄下創建template目錄(mysite/blog/templates),建立模板文件archive.html,它的內容以下:

{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.timestamp }}</p>
<p>{{ post.body }}</p>
{% endfor%}

2,建立一個視圖函數

在app應用的目錄下的view.py添加視圖函數

from django.shortcuts import render
from django.template import loader,Context
from django.http import HttpResponse
from blog.models import BlogPost

# Create your views here.

def archive(request):
    posts = BlogPost.objects.all()
    t = loader.get_template("archive.html")
    c = Context({'posts':posts})
    return HttpResponse(t.render(c))
  • posts = BlogPost.objects.all() :獲取數據庫裏面所擁有BlogPost對象

  • t = loader.get_template(「archive.html」):加載模板

  • c = Context({‘posts’:posts}):模板的渲染的數據是有一個字典類的對象Context提供,這裏的是一對鍵值對。

3,建立一個URL模式

第一步,在mysite/urls.py裏面取消下面的一行註釋:

#

 把它變成:

url(r'^blog/', include('blog.urls')),

第二步:在blog應用裏面定義URL,建立一個urls.py(mysite/blog/urls.py)

from django.conf.urls import *
from blog.views import archive

urlpatterns = patterns('',
                      url(r'^$',archive),
                      )

最後,在瀏覽器輸入以下地址http://127.0.0.1:8000/blog/

九,最後的潤色

1,模板的精肯定位

在mysite/blog/templates目錄裏建立一個叫base.html的模板

<html>
  <style type="text/css">
    body{color:#efd;background:#453;padding:0 5em;margin:0}
    h1{padding:2em 1em;background:#675}
    h2{color:#bf8;border-top:1px dotted #fff;margin-top:2em}
    p{margin:1em 0}
  </style>

  <body>
    <h1>my blog</h1>
    {% block content %}
    {% endblock %}
  </body>
</html>

2,修改archive.html模板,讓它引用base.html模板和它的「content」塊。

  
  {% extends "base.html" %}
  {% block content %}
  {% for post in posts %}
  <h2>{{  post.title }}</h2>
  <p>{{ post.timestamp | date:"1,F jS"}}</p>
  <p>{{ post.body }}</p>
  {% endfor %}
  {% endblock %}

刷新瀏覽器能夠看到效果以下:

3,按日期排序

修改blog 應用下的models.py,爲BlogPost添加一個Meta嵌套類。以下:

class BlogPost(models.Model):
    title = models.CharField(max_length = 150)
    body = models.TextField()
    timestamp = models.DateTimeField()

    class Meta:
        ordering = ('-timestamp',)

 刷新瀏覽器,以下:


聲明:OSCHINA 博客文章版權屬於做者,受法律保護。未經做者贊成不得轉載。

No tags for this post.
除非註明,本站文章均爲原創或編譯,轉載請註明: 文章來自 KENGINE | Kankanews.com


**************************************************
註釋:
本人環境ubuntu
1,同步數據庫,貌似要下載
sudo apt-get install python-mysqldb
不肯定這個。不過我還安裝了mysql
同步數據庫前,我先在setting中設置DATABASES,而後在mysql中建立了數據庫
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': 'mysitredb',                      # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': 'root',
        'PASSWORD': '123',
        'HOST': '',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '',                      # Set to empty string for default.
    }
}

2,在創建Blog的公共部分,在mysitre/urls.py中我添加了:
import blog
from blog import urls

3,個人成果,哈哈,照抄都抄了一下午才成功

相關文章
相關標籤/搜索