django 快速搭建blog

Django 自稱是「最適合開發有限期的完美WEB框架」。本文參考《Django web開發指南》,快速搭建一個blog 出來,在中間涉及諸多知識點,這裏不會詳細說明,若是你是第一次接觸Django ,本文會讓你在感性上對Django有個認識,完成本文操做後會讓你有興趣閱讀的相關書籍和文檔。css

廢話少說,come on!!html

本操做的環境:python

===================web

Windows 7/10shell

python 2.7數據庫

Django 1.8.2django

===================session

 

 

 建立工程                                                                                                          數據結構

 

建立mysite工程項目:app

D:/djpy> django-admin.py startproject mysite

工程目錄結構:

manage.py ----- Django項目裏面的工具,經過它能夠調用django shell和數據庫等。

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

urls.py ----- 負責把URL模式映射到應用程序。

 

 

建立blog應用                                                                                                   

 

在mysite目錄下建立blog應用

D:/pydj> cd mysite
D:/djpy/mysite$ python manage.py startapp blog

目錄結構:

 

 

初始化admin後臺數據庫                                                                                                

 

  python 自帶SQLite數據庫,Django支持各類主流的數據庫,這裏爲了方便推薦使用SQLite,若是使用其它數據庫請在settings.py文件中設置。

切換到mysite建立數據庫:

複製代碼
D:/djpy/mysite$ python manage.py syncdb

C:\Python27\lib\site-packages\django\core\management\commands\syncdb.py:24: RemovedInDjango19Warning: The syncdb command will be removed in Django 1.9
warnings.warn("The syncdb command will be removed in Django 1.9", RemovedInDjango19Warning)

Operations to perform:
Synchronize unmigrated apps: staticfiles, messages
Apply all migrations: admin, contenttypes, auth, sessions
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Installing custom SQL...
Running migrations:
Rendering model states... DONE
Applying contenttypes.0001_initial... OK
Applying auth.0001_initial... OK
Applying admin.0001_initial... OK
Applying contenttypes.0002_remove_content_type_name... OK
Applying auth.0002_alter_permission_name_max_length... OK
Applying auth.0003_alter_user_email_max_length... OK
Applying auth.0004_alter_user_username_opts... OK
Applying auth.0005_alter_user_last_login_null... OK
Applying auth.0006_require_contenttypes_0002... OK
Applying sessions.0001_initial... OK

You have installed Django's auth system, and don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'fnngj'):    用戶名(默認當前系統用戶名)
Email address: fnngj@126.com     郵箱地址
Password:     密碼
Password (again):    重複密碼
Superuser created successfully.

複製代碼

 

 

設置admin應用                                                                                    

  

  admin 是Django 自帶的一個後臺管理系統。

一、添加blog應用,打開mysite/mysite/settings.py 文件:

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

 在列表末尾,添加blog 應用

 

二、在咱們建立django項目時,admin就已經建立,打開mysite/mysite/urls.py文件:

複製代碼
from django.conf.urls import include, url from django.contrib import admin urlpatterns = [ url(r'^admin/', include(admin.site.urls)), ]
複製代碼

 

三、啓動django容器

複製代碼
D:\pydj\mysite>python manage.py runserver Performing system checks... System check identified no issues (0 silenced). October 04, 2015 - 20:56:45 Django version 1.8.2, using settings 'mysite.settings' Starting development server at http://127.0.0.1:8000/ Quit the server with CTRL-BREAK.
複製代碼

  

四、訪問後臺應用

http://127.0.0.1:8000/admin

 

 輸入用戶、密碼,用戶名密碼爲第一次建立數據庫時建立的。回想「設置數據庫」時的設置。

 

 

設計Model(即設計數據庫表)                                  

 

一、設計model

  如今咱們打開blog目錄下的models.py文件,這是咱們定義blog數據結構的地方。打開mysite/blog/models.py 文件進行修改:

複製代碼
from django.db import models from django.contrib import admin # Create your models here. class BlogsPost(models.Model): title = models.CharField(max_length = 150) body = models.TextField() timestamp = models.DateTimeField() admin.site.register(BlogsPost)
複製代碼

 

二、 再次初始化數據庫

複製代碼
D:\pydj\mysite>python manage.py makemigrations blog Migrations for 'blog': 0001_initial.py: - Create model BlogsPost D:\pydj\mysite>python manage.py syncdb C:\Python27\lib\site-packages\django\core\management\commands\syncdb.py:24: RemovedInDjango19Warning: The syncdb command will be removed in Django 1.9 warnings.warn("The syncdb command will be removed in Django 1.9", RemovedInDjango19Warning) Operations to perform: Synchronize unmigrated apps: staticfiles, messages Apply all migrations: admin, blog, contenttypes, auth, sessions Synchronizing apps without migrations: Creating tables... Running deferred SQL... Installing custom SQL... Running migrations: Rendering model states... DONE Applying blog.0001_initial... OK
複製代碼

 

 

三、再次runserver啓動服務,訪問admin後臺,建立文章。

  登錄成功選擇add 建立博客

輸入博客標題,正文、日期時間、點擊save 建立博客。

 

 

 

設置admin 的BlogsPost界面                                                              

 

  打開mysite/blog/models.py 文件,作以下修改:

複製代碼
from django.db import models from django.contrib import admin # Create your models here. class BlogsPost(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(BlogsPost,BlogPostAdmin)
複製代碼

 

建立BlogPostAdmin類,繼承admin.ModelAdmin父類,以列表的形式顯示BlogPost的標題和時間。

 

 

建立blog的公共部分

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

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

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

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

 

 

建立模板                                                                                                  

 

在blog項目下建立templates目錄(mysite/blog/templates/),在目錄下建立模板文件index.html,內容以下:

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

 

 

建立視圖函數                                                                                          

 

打開mysite/blog/views.py文件:

複製代碼
#coding=utf-8 from django.shortcuts import render from blog.models import BlogsPost from django.shortcuts import render_to_response # Create your views here. def index(request): blog_list = BlogsPost.objects.all()  return render_to_response('index.html',{'blog_list':blog_list})
複製代碼

blog_list = BlogPost.objects.all() :獲取數據庫裏面所擁有BlogPost對象

render_to_response()返回一個頁面(index.html),順帶把數據庫中查詢出來的全部博客內容(blog_list)也一併返回。

 

 

建立blog的URL模式                                                                             

 

在mysite/urls.py文件裏添加blog的url:

複製代碼
#coding=utf-8 from django.conf.urls import patterns, include, url from django.contrib import admin urlpatterns = patterns('', url(r'^admin/', include(admin.site.urls)), url(r'^index/$', 'blog.views.index'), )
複製代碼

 

再次啓動服務($ python manage.py runserver),訪問blog應用(http://127.0.0.1:8000/index/)下圖有錯,僅供參考。

頁面以下:

固然,讀者能夠繼續到admin後臺添加blog,從而刷新這個頁是否顯示新添加的blog。

 

 

添加樣式                                                                                                    

 

建立基礎模板

在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>蟲師blog</h1> <h3>大人不華,君子務實</h3> {% block content %} {% endblock %} </body> </html>
複製代碼

 

修改index.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 %}
複製代碼

再次刷新博客頁面:

http://127.0.0.1/index/   下圖有錯,僅供參考。

  請系統的學習django web框架,而後在此基礎上作更多的擴展,開發本身真正的blog 

相關文章
相關標籤/搜索