配置Model
在blog/myblog/blog中models.py配置
from django.db import models
# Create your models here.
class Article(models.Model):
a_title = models.CharField('標題', max_length=20)
a_content = models.TextField('內容')
a_create_time = models.DateTimeField('發(fā)表時間', auto_now_add=True)
a_update_time = models.DateTimeField('修改時間', auto_now=True, null=True)
abstract = models.CharField('摘要', max_length=200, blank=True, null=True, )
def __str__(self): # 美化后臺管理顯示文章標題而不是article_object
return self.a_title
class Meta:
db_table = 'article'
verbose_name = '博文' # 美化后臺管理
verbose_name_plural = '博文'
在blog/myblog 運行 python manage.py makemigrations然后運行 python manage.py migrate 遷移數據庫
現在你的blog數據庫中就會有如下表格(如果你想有一個更親切的mysql操作界面可以下載使用Navigate 12 for Mysql):
4.PNG
配置views
在blog/myblog/blog中views.py配置
```
from django.core.paginator import Paginator
from django.shortcuts import render
from django.views.generic.detail import DetailView
import markdown2, re
from blog.models import Article
# Create your views here.
def index(request):
if request.method == 'GET':
return render(request, 'index.html')
def blog(request):
if request.method == 'GET':
page_id = request.GET.get('page_id', 1) # 默認第一頁
articles = Article.objects.all().order_by('-id') # 按id倒序
paginator = Paginator(articles, 3) # 每頁三篇文章
articles_list = paginator.page(int(page_id)) # 每頁包含的文章對象列表
return render(request, 'blog.html', {'articles': articles_list}) # 返回給頁面
class ArticleDetailView(DetailView):
model = Article
template_name = 'detail.html'
context_object_name = "article"
pk_url_kwarg = 'article_id'
def get_object(self, queryset=None):
obj = super(ArticleDetailView, self).get_object()
obj.a_content = markdown2.markdown(obj.a_content) # markdown格式處理數據
return obj
def contact(request):
if request.method == 'GET':
return render(request, 'contact.html')
def search(request):
if request.method == 'GET':
return render(request, 'search.html')
def search_for(request):
search_for = request.GET['search_for']
if search_for:
results = []
article_list = Article.objects.all().order_by('-id')
for article in article_list:
pattern = re.compile(search_for, flags=re.IGNORECASE) # 默認搜索文章標題忽略大小寫
if pattern.findall(article.a_title):
results.append(article)
for article in results: # 將搜索結果以列表形式返回給頁面
article.body = markdown2.markdown(article.a_content)
return render(request, 'search.html', {'arts': results})
else:
return render(request, 'search.html')
配置urls
在blog/myblog/blog中urls.py配置
from django.conf.urls import url
from blog import views
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^blog/', views.blog),
url(r'^article/(?P<article_id>\d+)$', views.ArticleDetailView.as_view(), name='detail'),
url(r'^contact/$', views.contact, name='contact'),
url(r'^search/$', views.search),
url(r'^search/search/', views.search_for),
]
配置admin
將model注冊到后臺管理就可以通過后臺添加刪除編輯(增刪改查)數據
from django.contrib import admin
from .models import Article
# Register your models here.
admin.site.register([Article,])
在blog/myblog/中運行 python manage.py createsuperuser依次輸入要創(chuàng)建的管理員名稱與密碼,然后python manage.py runserver 127.0.0.1:8000/admin 輸入你的賬號密碼,在博文中添加內容就好,添加后返回站點就可以看見自己的博文了.
由于templates文件我是直接上傳分享的,里面涉及到的內容可以自己百度一下,也可以試試為博客新添一些功能,比如點贊\訪問量(可利用中間鍵達成),比如增加照片頁面(思路:新建一個照片數據庫,在設置中配置media)……很多很多,都可以自己去學習完善各項功能,折騰折騰就理解了.
最后運行python manage.py runserver
展示效果大致如下:
12PNG.PNG
13.PNG
由于個人的服務器正在做項目測試所以沒有部署在服務器上供大家展示,這個博客足夠簡單,很多細節(jié)的地方可能我也沒有太過在意,有查不到的問題可以評論,或者添加其他功能的時候遇到困難也可以問我,希望共同學習