1. 程式人生 > >Django學習筆記--第一天--搭建一個簡易部落格

Django學習筆記--第一天--搭建一個簡易部落格

前言:最近準備寫一個自己的個人部落格。本來想用.net開發的,由於VS有點裝不上,最近學習Python。選擇了python的web框架Django。
開發環境:Ubuntu 14.04
開發工具:Pychram 2016.1.0 社群版
Python版本:2.7.6
Django版本:1.9.6
<參考資料>—前人文章:http://my.oschina.net/jastme/blog/345265
下面開始:
1.工具安裝:
python已經自帶;開啟Pychram
File–>settings–>Project **–>Project Interpreter
點選綠色的+號,搜尋Django –>選擇 Install Package即可安裝完成.
這裡寫圖片描述

輸入:import django
驗證是否安裝成功。如果沒有報錯,表示成功。
這裡寫圖片描述

2.建立工程
PS:路徑最好不要包含中文,否則會報錯
開啟終端輸入:

django-admin.py startproject mysite
cd mysite
python manage.py startapp blog
django-admin.py startproject mysite

新建了許多工程檔案:

  • manage.py —– Django專案裡面的工具,通過它可以呼叫django shell和資料庫等。

  • settings.py —- 包含了專案的預設設定,包括資料庫資訊,除錯標誌以及其他一些工作的變數。

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

 python manage.py startapp blog

建立了Blog應用
用Pychram開啟工程:可以看到下面的檔案結構:
這裡寫圖片描述

然後在/mysite/mysite/settings.py裡面的

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages'
, 'django.contrib.staticfiles', ]

新增’blog’,

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
]

表示新增一個blog app

3.資料庫建立
django使用程式碼的方式建立資料庫。
首先修改mysite/blog/models.py 繼承預設的資料庫類,建立資料庫

from __future__ import unicode_literals
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資料庫。需要修改在settings裡面,預設為sqlite3

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }

建立資料庫:
切換到含有manage.py的目錄下:

python manage.py makemigrations 
python manage.py migrate

這裡寫圖片描述

4.後臺管理
django預設開啟了admin的後臺:

urlpatterns = [
    url(r'^admin/', admin.site.urls),
]

終端輸入:python manage.py runserver開啟服務(再價一個引數可以設定埠號)
訪問 http://127.0.0.1:8000/admin 訪問後臺
這裡寫圖片描述
需要管理員密碼賬號:
終端輸入:

python manage.py createsuperuser

根據提示建立即可。
五.修改資料庫內容,新增其他項。
在最後新增一行程式碼:

admin.site.register(BlogPost)

前面新增:

from django.contrib import admin

這樣就多了一個BlogPost的項了
這裡寫圖片描述
Add–>新增文章,就能開始寫文章了。

然後再對後臺介面做個優化,讓文章的標題時間顯示出來‘
修改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下面新建一個templates資料夾,這裡可以放置各種資源,會預設找到這裡。
在templates下新建一個模板頁面。
muban.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我的部落格</title>
</head>
<body>
{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.timestamp }}</p>
<p>{{ post.body }}</p>
{% endfor%}
</body>
</html>

其中{{ }}裡面包含的是要顯示的變數,使用一個for迴圈把文章全部顯示在頁面上。

檢視blog/views裡面包含要顯示的頁面方式。
在這裡呼叫模板並且傳入引數:

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 muban(request):
    posts = BlogPost.objects.all()
    t = loader.get_template("muban.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提供,這裡的是一對鍵值對。

現在還是不能顯示部落格頁面,因為請求首先是在mysite/urls裡面處理的,
所以要新增一個url到blog的views裡面去。

from django.conf.urls import url
from django.contrib import admin
from blog import views as blog_views  # new

urlpatterns = [
    url(r'^blog', blog_views.muban, name='muban'),  # new
    url(r'^admin/', admin.site.urls),
]

七.美化介面
mysite/blog/templates目錄裡建立一個叫base.html的模板

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<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>

繼承模板:
muban.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
{% 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 %}
</body>
</html>

按日期排序

修改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',)

重新整理瀏覽器:
這裡寫圖片描述