说明:我的系统环境是ubuntu 14.10版本的,整理这篇博客,主要是自己记性太不好了,老忘东西,教训一下自己。哈哈

参考文章

createing blog

1,part-1-creating-blog

2,part-2-creating-blog

3,part-3-creating-blog

django framework application

django framework

安装django及博客相关包

apt-get install python-django -y    #django version 1.7
pip install markdown pygments django-pagedown

create project

mkdir /var/www/django_project    #放用django框架开发的各类应用项目

cat  create_django_object.sh    # 创建项目及应用脚本

#!/bin/bash
dir=/var/www/django_project cd $dir
django-admin.py startproject $1
cd $dir/$1
python manage.py startapp $2 #使用方法如下,传两个参数: 项目名称 应用名称
./create_django_object.sh mydjblog blog

配置项目wqkblog setting.py 如下:

# Application definition
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
#'south',
'linaro_django_pagination', #分页用
'blog',
'pagedown',
)
# 处理模板的功能
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.debug',
'django.core.context_processors.i18n',
'django.core.context_processors.media',
'django.core.context_processors.static',
'django.core.context_processors.tz',
'django.contrib.messages.context_processors.messages',
"django.core.context_processors.request"
) # 连接数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
} # 设置语言
LANGUAGE_CODE = 'zh-cn'
# 时区
TIME_ZONE = 'Asia/Shanghai'

静态文件及模板目录配置

# 静态文件目录
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
) # 模版文件目录
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, "templates"),
)
# 设置首页显的博客数量
PAGINATION_DEFAULT_PAGINATION = 3
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
)

create the models 给自己的应用创建models

说明:以python面向对象的思想将数据库表创建为类,类内部变量为字段名
# -*- coding: utf-8 -*-
from django.db import models
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse class Category(models.Model):
name = models.CharField(u'文章分类', max_length=64) class Meta:
ordering = ['-id'] def __unicode__(self):
return self.name @models.permalink
def get_absolute_url(self):
return ('category', (), {'pk': self.pk}) class Post(models.Model):
title = models.CharField(u"标题", max_length=128)
author = models.ForeignKey(User)
po_type = models.ForeignKey(Category, verbose_name=u'文章分类', blank=True, null=True)
#content = models.TextField(u'Content (Markdown)')
content = models.TextField(u'Content (Markdown)')
pub_data = models.DateTimeField(auto_now_add=True) class Meta:
ordering = ["-id"] def __unicode__(self):
return self.title @models.permalink
def get_absolute_url(self):
return ('post', (), {'pk': self.pk})

create blog models to django admin

from django.contrib import admin
from django import forms
from pagedown.widgets import AdminPagedownWidget
from models import Post, Category class CategoryAdmin(admin.ModelAdmin):
#prepopulated_fields = {'slug':('name',)}
list_display = ('name',)
search_fields = ('name',) class PostFrom(forms.ModelForm):
class Meta:
model = Post
widgets = {
'content':AdminPagedownWidget(),
} class PostAdmin(admin.ModelAdmin):
form = PostFrom
#prepopulated_fields = {'slug':('title',)}
list_display = ('title','author','po_type','content','pub_data',)
search_fields = ('title','content',)
fieldsets = (
(
None,
{
'fields': ('title', 'author', 'po_type', 'content',)
}
), ) admin.site.register(Post,PostAdmin)
admin.site.register(Category,CategoryAdmin)

创建数据库表结构

python manage.py syncdb
此过程中会提示输入管理员的用户名及密码,我这里全是root

启动django web服务

python manage.py runserver 0.0.0.0:9000

admin 后台登录添加数据

127.0.0.1:9000/admin

url与views配置编写为并template传值

setings.py同级主url配置
from django.conf.urls import patterns, include, url from django.contrib import admin
admin.autodiscover() urlpatterns = patterns('',
url(r'^', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
) blog 应用url配置
from django.conf.urls import patterns, include, url urlpatterns = patterns('',
url(r"^$", "blog.views.index", name="index"),
url(r"^post/(?P<pk>\d+)/$", "blog.views.post", name="post"),
url(r'^(?P<id>\d+)/$', 'blog.views.detail', name='detail'),
url(r"^category/(?P<pk>\d+)/$", "blog.views.category", name="category"),
url(r'^tag(?P<tag>\w+)/$', 'blog.views.search_tag', name = 'search_tag'),
url(r'^search/$','blog.views.blog_search', name = 'search'),
) blog 应用views编写:
# -*- coding: utf-8 -*-
from django.shortcuts import render_to_response, get_list_or_404, get_object_or_404
from django.template import RequestContext
from django.http import Http404
from blog.models import Post, Category def index(request):
"""blog列表"""
categories = Category.objects.all()
posts = Post.objects.all()
return render_to_response("blog/index.html",
{"posts": posts,
"categories": categories
},
context_instance=RequestContext(request)) def post(request, pk):
"""单篇文章"""
categories = Category.objects.all()
post = get_object_or_404(Post, pk=pk)
return render_to_response("blog/post.html",
{"post": post,
"categories": categories
},
context_instance=RequestContext(request)) def detail(request, id):
try:
post = Post.objects.get(id=str(id))
except Post.DoesNotExist:
raise Http404
return render(request, 'blog/post.html', {'post' : post}) def category(request, pk):
"""相应分类下的文章检索""" try:
cate = Category.objects.get(pk=pk)
except Category.DoesNotExist: ## 读取分类,如果不存在,则引发错误,并404
raise Http404 posts = cate.post_set.all() ## 获取分类下的所有文章
return render_to_response('blog/index.html', ## 使用首页的文章列表模版,但加入了的一个`is_category`开关
{"posts": posts,
"is_category": True,
"cate_name": cate.name,
"categories": Category.objects.all()},
context_instance=RequestContext(request)) def blog_search(request):
if 's' in request.GET:
s = request.GET['s']
if not s:
return render_to_response('blog/index.html')
else:
post_list = Post.objects.filter(title__icontains = s)
if len(post_list) == 0 :
return render_to_response('blog/archives.html', {'post_list' : post_list,
'error' : True})
else :
return render_to_response('blog/archives.html', {'post_list' : post_list,
'error' : False})
return redirect('/') def search_tag(request, tag):
print tag,
try:
post_list = Post.objects.filter(po_type__iexact = tag) #contains
except Post.DoesNotExist :
raise Http404
return render_to_response('tag.html', {'post_list' : post_list})

模板处理和样式处理

参考源代码这里

最终结果如下:

用django框架做自己的blog的更多相关文章

  1. Django框架-目录文件简介

    Rhel6.5 Django1.10 Python3.5 Django框架-目录文件简介 1.介绍Django Django:一个可以使Web开发工作愉快并且高效的Web开发框架. 使用Django, ...

  2. Django框架全面讲解

    Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能. ...

  3. Django框架之中间件与Auth

    Django框架之中间件与Auth模块一 cbv加装饰器 -先导入:from django.utils.decorators import method_decorator -1 可以在方法上加装饰器 ...

  4. web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例

    Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...

  5. Django 框架 基本知识

    一.什么事web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支持结构,使用框架可以使我们快速开发特定的系统,简单来说,就是讲实现方式的底层结构进行封装,提供相应的 ...

  6. 第三百零四节,Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器

    Django框架,urls.py模块,views.py模块,路由映射与路由分发以及逻辑处理——url控制器 这一节主讲url控制器 一.urls.py模块 这个模块是配置路由映射的模块,当用户访问一个 ...

  7. 框架----Django框架知识点整理

    一.cbv cbv(class-base-view) 基于类的视图 fbv(func-base-view) 基于函数的视图 a.基本演示 urlpatterns = [ url(r'^login.ht ...

  8. 第六模块:WEB框架开发 第1章·Django框架开发88~128

    88-Ajax简介 89-Ajax的简单实现 90-基于Ajax的传递数据 91-基于Ajax的登录验证 92-基于Form表单的文件上传 93-请求头之contentType 94-Ajax传递js ...

  9. 第六模块:WEB框架开发 第1章·Django框架开发1~50

    01-Django基础介绍 02-Web应用程序1 03-Web应用程序2 04-http请求协议1 05-http请求协议2 06-http协议之响应协议 07-wsgire模块1 08-wsgir ...

随机推荐

  1. Alpha 冲刺6

    队名:日不落战队 安琪(队长) 今天完成的任务 回收站前端界面. 明天的计划 查看个人信息界面. 还剩下的任务 信息修改前端界面. 设置界面. 遇到的困难 模拟机莫名其妙就崩了,调试了很久,后在队友的 ...

  2. C++ auto_ptr智能指针的用法

    C++中指针申请和释放内存通常采用的方式是new和delete.然而标准C++中还有一个强大的模版类就是auto_ptr,它可以在你不用的时候自动帮你释放内存.下面简单说一下用法. 用法一: std: ...

  3. 201621123037《Java程序设计》第二周学习总结

    #Week02-Java基本语法与类库 1. 本周学习总结 关键词:常量池.对象.null.不可变性.string对象拼接.字符串池 关键概念之间的联系:Java中有常量池,超出常量池以外的就会新开辟 ...

  4. ZY、

  5. 【leetcode】215. Kth Largest Element in an Array

    Find the kth largest element in an unsorted array. Note that it is the kth largest element in the so ...

  6. jstack笔记

    遇到java程序跑不动怎么办,jstack是比较容易想到的一个工具,利用jstack来dump出一个线程堆栈快照,然后具体分析. 一般的堆栈大概是由下面的部分组成的: "resin-2212 ...

  7. webgl helloworld

    之前的webgl 初识1, 初识2 已经介绍了webgl的基本概念,工作原理. 没有理解的自己yy. 现呈上例子一枚 <!DOCTYPE html> <html lang=" ...

  8. 【C++】构造函数不能是虚函数

    1 虚函数对应一个vtable,这大家都知道,可是这个vtable其实是存储在对象的内存空间的.问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没 ...

  9. 【bzoj3697】采药人的路径 树的点分治

    题目描述 给出一棵 $n$ 个点的树,每条边的边权为1或0.求有多少点对 $(i,j)$ ,使得:$i$ 到 $j$ 的简单路径上存在点 $k$ (异于 $i$ 和 $j$ ),使得 $i$ 到 $k ...

  10. C++解析-外传篇(1):异常处理深度解析

    0.目录 1.异常的最终处理 2.结束函数terminate() 3.小结 1.异常的最终处理 问题: 如果在main函数中抛出异常会发生什么? 如果异常不处理,最后会传到哪里? 下面的代码的输出什么 ...