说明:我的系统环境是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. SGU 181 X-Sequence(一题比较水的求模找规律)

    E - X-Sequence Time Limit:500MS     Memory Limit:4096KB     64bit IO Format:%I64d & %I64u Submit ...

  2. Hadoop HDFS环境搭建

    1,首先安装JDK,下面如果JDK出现安装错误,可以卸载 卸载 1.卸载用 bin文件安装的JDK方法: 删除/usr/java目录下的所有东西 2.卸载系统自带的jdk版本方法: 查看自带的jdk: ...

  3. MySQL误操作后如何快速回滚(转)

    本文转自http://www.cnblogs.com/dfcao/p/6147970.html#undefined 感谢作者 基本上每个跟数据库打交道的程序员(当然也可能是你同事)都会碰一个问题,My ...

  4. Windows连接Linux服务器中MySQL数据库-权限配置

    问题描述 在Windows系统中安装了监控MySQL数据库服务器性能的工具Spotlight on MySQL,利用Spotlight连接Linux服务器中的MySQL,进行相关配置如下:   点击& ...

  5. java 基础 --final--008

    finally:被finally控制的语句一定会执行,但是如果执行之前jvm退出了,就不会执行了.比如System.exit(0);final:常见的可以修饰类(该类不能被继承) 方法(方法不能被重写 ...

  6. PHP中对象的传值方式

    对象的传值方式: 为什么对于对象,值传递和引用传递,这个情况下,他们似乎没有区别??? 这要从对象的数据的存储方式来理解: $o1 = new C1(); //这里创建一个对象o1,其存储结果如图所示 ...

  7. 【C++】深度探索C++对象模型读书笔记--构造函数语义学(The Semantics of constructors)(四)

    成员们的初始化队伍(member Initia 有四种情况必须使用member initialization list: 1. 当初始化一个reference member时: 2. 当初始化一个co ...

  8. LoadRunner脚本增强技巧之参数化(二)

    特别提醒: 1.在形成数据池之后,数据库中的数据变化不会影响数据池中的数据. 2.数据文件一定要以一个空行结束,否则,最后一行输入的数据不会被参数所使用. 3.一般我们用到的很多的都是使用数据文件来保 ...

  9. BZOJ4915 简单的数字题

    不妨设a1<a2<a3<a4.显然第一问的答案是4,满足a1+a4=a2+a3,a1+a2|a3+a4,a1+a3|a2+a4.容易发现将其同时扩大k倍是仍然满足条件的,于是考虑gc ...

  10. linux服务之NTP时间服务器

    1. NTP简介 NTP(Network Time Protocol,网络时间协议)是用来使网络中的各个计算机时间同步的一种协议.它的用途是把计算机的时钟同步到世界协调时UTC,其精度在局域网内可达0 ...