本操做的環境:css
===================html
macpython
python 2.7web
Django 1.11.4shell
===================數據庫
建立工程 django
eclipse中建立testBlog工程項目:session
> django-admin.py startproject testBlog
工程目錄結構:數據結構
manage.py ----- Django項目裏面的工具,經過它能夠調用django shell和數據庫等。app
settings.py ---- 包含了項目的默認設置,包括數據庫信息,調試標誌以及其餘一些工做的變量。
urls.py ----- 負責把URL模式映射到應用程序。
建立blog應用
在testBlog目錄下建立blog應用
>cd /Users/Zd/Desktop/GitHub/BigDataTrain/Python/testBlog/src
$ python manage.py startapp blog
初始化admin後臺數據庫
python 自帶SQLite數據庫,Django支持各類主流的數據庫,這裏爲了方便推薦使用SQLite,若是使用其它數據庫請在settings.py文件中設置。
切換到mysite建立數據庫:
e$ 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
from blog.views import index
urlpatterns = [
url(r'^admin/',admin.site.urls),
url(r'^index/$',index),
]
三、啓動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,內容以下:
<!-- 注意是views.py中index函數傳過來的參數 -->
{% for post in blog_list %}
<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
from blog.views import index
urlpatterns = [
url(r'^admin/',admin.site.urls),
url(r'^index/$',index),
]
再次啓動服務($ python manage.py runserver),訪問blog應用(http://127.0.0.1:8000/index/)
頁面以下:
固然,讀者能夠繼續到admin後臺添加blog,從而刷新這個頁是否顯示新添加的blog。
添加樣式
建立基礎模板
在mysite/blog/templates目錄裏建立hello.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模板,讓它引用hello.html模板和它的「content」塊。
{% extends "base.html" %} {% block content %} {% for post inblog_list %}
<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 。