Django搭建個人博客(終篇)

配置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é)的地方可能我也沒有太過在意,有查不到的問題可以評論,或者添加其他功能的時候遇到困難也可以問我,希望共同學習

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容