陈斌彬的技术博客

Stay foolish,stay hungry

Django 快速搭建 Blog

Django 自称是“最适合开发有限期的完美WEB框架”。

创建工程

创建 mysite 工程项目,执行命令:

$ django-admin.py startproject mysite

manage.py —– Django项目里面的工具,通过它可以调用django shell和数据库等。

settings.py —- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。

urls.py —– 负责把URL模式映射到应用程序。

创建blog应用

1.在 mysite 目录下创建 blog 应用:

$ python manage.py startapp blog

2.打开 blog 目录下的 models.py 文件,这是我们定义 blog 数据结构的地方。创建 BlogsPost类,继承 django.db.models.Model 父类,定义三个变量,title (博客标题),body(博客正文),timestamp(博客创建时间)

from django.db import models

# Create your models here.
class BlogsPost(models.Model):
    title = models.CharField(max_length = 150)
    body = models.TextField()
    timestamp = models.DateTimeField()

设置数据库

$ python manage.py syncdb

结果如下:

AppledeiMac:mysite apple$ python manage.py syncdb
Creating tables ...
Creating table django_admin_log
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_groups
Creating table auth_user_user_permissions
Creating table auth_user
Creating table django_content_type
Creating table django_session

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'apple'):
Email address: 845040571@qq.com
Password:
Password (again):
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

设置admin应用

adminDjango 自带的一个后台管理系统。

1.添加 blog 应用,打开 mysite/mysite/settings.py 文件,找到 INSTALLED_APPS,末尾添加 ‘blog’,

# Application definition

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
)

2.将我们创建数据添加到 admin 后台,再次打开 mysite/blog/models.py 文件进行修改:

from django.db import models
from django.contrib import admin

# Create your models here.
class BlogsPost(models.Model):
    title = models.CharField(max_length = 150)
    body = models.TextField()
    timestamp = models.DateTimeField()

admin.site.register(BlogsPost)

3.再次初始化数据库

$ python manage.py syncdb

结果如下:

AppledeiMac:mysite apple$ python manage.py syncdb
Creating tables ...
Creating table blog_blogspost
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)

4.启动服务

$ python manage.py runserver

5.访问 admin 后台

img

输入用户、密码,用户名密码为第一次创建数据库时创建的。回想“设置数据库”时的设置。

6.创建博客

登陆成功选择 add 创建博客

img

输入博客标题,正文、日期时间、点击 save 创建博客。

img

设置admin 的BlogsPost界面

打开 mysite/blog/models.py 文件,做如下修改:

from django.db import models
from django.contrib import admin

# Create your models here.
class BlogsPost(models.Model):
    title = models.CharField(max_length = 150)
    body = models.TextField()
    timestamp = models.DateTimeField()

class BlogPostAdmin(admin.ModelAdmin):
    list_display = ('title','timestamp')

admin.site.register(BlogsPost,BlogPostAdmin)

创建 BlogPostAdmin 类,继承 admin.ModelAdmin 父类,以列表的形式显示 BlogPost 的标题和时间。

img

创建模板

在 blog 项目下创建 templates 目录 (mysite/blog/templates/) ,在目录下创建模板文件 archive.html,内容如下:

{% for post in posts %}
    <h2>{{ post.title }}</h2>
    <p>{{ post.timestamp }}</p>
    <p>{{ post.body }}</p>
{% endfor%}

设置模板路径,打开 mysite/mysite/settings.py 文件,在文件底部添加模板路径:

#template
TEMPLATE_DIRS=(
    '/Users/apple/mysite/blog/templates'
)

创建视图函数

打开 mysite/blog/views.py 文件:

from django.shortcuts import render
from django.template import loader,Context
from django.http import HttpResponse
from blog.models import BlogsPost

# Create your views here.
def archive(request):
    posts = BlogsPost.objects.all()
    t = loader.get_template("archive.html")
    c = Context({'posts':posts})
    return HttpResponse(t.render(c))

posts = BlogPost.objects.all() :获取数据库里面所拥有 BlogPost 对象

t = loader.get_template(“archive.html”):加载模板

c = Context({‘posts’:posts}):模板的渲染的数据是有一个字典类的对象 Context 提供,这里的是一对键值对。

创建blog的URL模式

mysite/urls.py 文件里添加 blogurl

urlpatterns = patterns('',
    # Examples:
    # url(r'^$', 'mysite.views.home', name='home'),

    url(r'^blog/', include('blog.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

mysite/blog/ 目录下创建 urls.py 文件:

from django.conf.urls import *
from blog.views import archive


urlpatterns = patterns('',
                      url(r'^$',archive),
                      )

blog 应用下面又创建 urls.py文件,是为了降低耦合度。这样 mysite/urls.py 文件针对的是每个项目的 url

再次启动服务

$ python manage.py runserver

访问 blog 应用

http://127.0.0.1:8000/blog/

页面如下:

img

添加样式

创建基础模板,在 mysite/blog/templates 目录里创建 base.html 的模板:

<html>
      <style type="text/css">
        body{color:#efd;background:#453;padding:0 5em;margin:0}
        h1{padding:2em 1em;background:#675}
        h2{color:#bf8;border-top:1px dotted #fff;margin-top:2em}
        p{margin:1em 0}
      </style>

      <body>
        <h1>陈斌彬的技术博客</h1>
        <h3>Stay hungry,stay foolish</h3>
    {% block content %}
        {% endblock %}
      </body>
</html>

修改 archive.html 模板,让它引用 base.html 模板和它的 content 块。

{% extends "base.html" %}
  {% block content %}
      {% for post in posts %}
      <h2>{{  post.title }}</h2>
      <p>{{ post.timestamp | date:"1,F jS"}}</p>
      <p>{{ post.body }}</p>
      {% endfor %}
  {% endblock %}

再次刷新博客页面:

img

总结

今天早上用 django 搭建 blog,用 python 语言做一个实际的应用,开阔自己的视野,增加自己的兴趣。

参考