step_1css
首先建立一個新項目FirstBlog(如下簡稱FB),實現基礎功能,如建立數據庫,建立超級用戶,能夠實現後臺管理員登錄 過程可參考[連接描述][1]
step_2html
在FB中註冊應用blog,編寫數據庫文件blog/models.py,告訴主程序FirstBlog/settings.py你註冊了應用,並修改數據庫 後臺運行前,須要在blog/admin.py中註冊站點 博客屬性:id,博客標題,博客做者,博客摘要,博客正文,博客建立時間,博客所屬專欄(類別),博客標籤,閱讀數 標籤屬性:id,標籤名稱 專欄(類別)屬性:id,專欄名稱 博客和專欄: 多對一 博客和標籤: 多對多
與flask的數據庫表結構不一樣,django框架裏,數據庫表之間的關聯只須要在對應關係裏多的一側寫外鍵ForeignKey,不須要在另外一個表寫反向引用。若是是多對多的關係,可在任意一端寫ManyToManyField。前端
# blog/models.py from django.contrib.auth.models import User from django.db import models # Create your models here. # 博客屬性:id,博客標題,博客做者,博客摘要,博客正文,博客建立時間,博客所屬專欄(類別),博客標籤,閱讀數,評論數 # 標籤屬性:id,標籤名稱 # 專欄(類別)屬性:id,專欄名稱 # 博客和專欄: 多對一 # 博客和標籤: 多對多 class Category(models.Model): name = models.CharField(max_length=64, verbose_name='專欄名稱') class Meta: verbose_name = '專欄' verbose_name_plural = '專欄' def __str__(self): return '%s' %(self.name) class Tag(models.Model): name = models.CharField(max_length=64, verbose_name='標籤名稱') class Meta: verbose_name = '標籤' verbose_name_plural = '標籤' def __str__(self): return '%s' %(self.name) class Post(models.Model): title = models.CharField(max_length=100, unique=True, verbose_name='標題') create_time = models.DateTimeField(verbose_name='建立時間') summary = models.CharField(max_length=255, verbose_name='摘要') body = models.TextField(verbose_name='正文') # 做者能夠從管理員數據庫表User中查找 author = models.ForeignKey(User, verbose_name='做者') category = models.ForeignKey(Category, verbose_name='專欄') tags = models.ManyToManyField(Tag, verbose_name='標籤') views = models.IntegerField(default=0,verbose_name='閱讀數') class Meta: verbose_name = '博客' verbose_name_plural = '博客' def __str__(self): return '%s' %(self.title)
step_3git
後臺建立多個標籤、欄目,多篇博客,確保前端顯示是有數據的。
step_4github
構建路由和視圖函數,並告訴主路由函數FirstBlog/settings.py如何查找
step_5數據庫
建立靜態模板目錄static/,修改模板文件,settings.py文件的static配置。若是沒有修改settings.py文件,可在模板文件加上{% load static%}。並修改樣式(css...)的位置 根據使用的網頁模板,顯示本身的頁面
顯示結果:
django
from django.urls import reverse #返回正確而完整的路由
爲了在html文件內,繼續閱讀能夠直接跳轉{{ post.get_url }} 注意在重寫視圖函數名稱時,須要申明命名空間
修改blog/models.py的Post表,添加屬性get_url()flask
#blog/models.py def get_url(self): return reverse('blog:detail',kwargs={'id':self.pk})
#blog/urls.py from django.conf.urls import url from django.contrib import admin from blog import views app_name = 'blog' urlpatterns = [ url(r'^$',views.index ,name='index'), url(r'book/(?P<id>\d+)/$',views.detail,name='detail' ), ]
闊以看見html文件的‘繼續閱讀’會自動連接到博客詳情頁markdown
{#templates/blog/index.html 部分代碼#} <div class="read-more cl-effect-14"> <a href="{{ post.get_url }}" class="more-link">繼續閱讀 <span class="meta-nav">→</span></a> </div>
如今的博客都是使用mrkdown語法來顯示的,而且配備高亮顯示app
須要下載安裝模塊Markdown,pygments 在視圖函數裏將博客正文轉成html時,加上高亮的ectensions 修改base.html,添加對應高亮的css樣式
#blog/views.py文件 post.body = markdown( post.body, extensions=['markdown.extensions.extra', 'markdown.extensions.codehilite', 'markdown.extensions.toc', ], output_format='html' )
{#templates/blog/detail.html 部分代碼#} <div class="entry-content clearfix"> {{ post.body | safe}} </div>
{#templates/base.html 部分代碼#} {# 代碼高亮顯示的樣式#} <link rel="stylesheet" href="/static/css/highlights/github.css">
修改數據庫表結構,添加增長閱讀量的方法
#blog/models.py # 增長閱讀量 def add_views(self): self.views +=1 self.save(update_fields=['views']) #只從新保存更新字段views
修改視圖函數,當你訪問某一篇博客時,閱讀量加1
post = Post.objects.get(id=id) post.add_views()
闊以從圖上看出,閱讀量的增長