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('发表时间', 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依次输入要创建的管理员名称与密码,然后python manage.py runserver 127.0.0.1:8000/admin 输入你的账号密码,在博文中添加内容就好,添加后返回站点就可以看见自己的博文了.


由于templates文件我是直接上传分享的,里面涉及到的内容可以自己百度一下,也可以试试为博客新添一些功能,比如点赞\访问量(可利用中间键达成),比如增加照片页面(思路:新建一个照片数据库,在设置中配置media)……很多很多,都可以自己去学习完善各项功能,折腾折腾就理解了.
最后运行python manage.py runserver
展示效果大致如下:

12PNG.PNG
13.PNG

由于个人的服务器正在做项目测试所以没有部署在服务器上供大家展示,这个博客足够简单,很多细节的地方可能我也没有太过在意,有查不到的问题可以评论,或者添加其他功能的时候遇到困难也可以问我,希望共同学习

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容