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