【django】搭建博客教程(1)——环境搭建,项目创建及初步测试

相信使用django的朋友,很多都是从搭博客开始的,虽然没什么新意,但是个人觉得还是很有意义的!毕竟学习资源会很多,而且搭好的博客可以自己拿来使用!!

下面我把自己搭建博客的一些过程总结记录下来~以供大家参考。

一.环境的搭建

开发环境:

Ubuntu 14.04

python2.7.6

django1.8

virtualenv

Bootstrap3.0

环境搭建:

安装virtualenv :

sudo pip install virtualenv

创建并激活虚拟环境 :

virtualenv blog
cd blog
source bin/activate

virtualenv可创建独立的python开发环境,在虚拟的工作环境下安装的相关软件会安装在当前环境下,所以不同的虚拟环境互不干扰,有利于不同版本的python开发。

安装Django1.8 :

pip install Django==1.8

如果使用sqlite,安装pytz :

pip install pytz

二.项目创建

我们创建一个名为jiange_blog的Django项目,创建项目的指令如下:

$ django-admin.py startproject my_blog

看一下项目的结构:

$ tree jiange_blog
jiange_blog/
├── jiange_blog
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
└── manage.py

建立Django app:

在一个项目下,可以建立多个app,其实app相当于一个功能模块,比如我的博客是一个模块,然后我可以将评论,登陆认证模块独立出来做成模块,方便代码的管理,重用等。

建立一个blog app

$ python manage.py startapp  blog
jiange_blog/
├── blog
│   ├── admin.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── jiange_blog
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── settings.py
│   ├── settings.pyc
│   ├── urls.py
│   └── wsgi.py
└── manage.py

在应用blog下面,models.py是数据库部分,views.py是视图处理部分,admin.py是后台管理部分。

建立了app后,我们需要在jiange_blog/jiange_blog/settings.py里面添加我们的新应用:

 33 INSTALLED_APPS = (
 34     'django.contrib.admin',
 35     'django.contrib.auth',
 36     'django.contrib.contenttypes',
 37     'django.contrib.sessions',
 38     'django.contrib.messages',
 39     'django.contrib.staticfiles',
 40     'blog', #我的blog app
 41 )

进行下数据库迁移并运行:

python manage.py makemigrations
python manage.py migrate
python manage.py runserver

打开http://127.0.0.1:8000/,如果你看到“It worked!”,那么恭喜,一切顺利!

总结:创建项目,创建app,配置app。

二.Moldes——数据库定义

每一个Django Model都继承自django.db.models.Model。

我们在Models里定义的每一个类都对应了一张表,每一个成员对应了一个属性。

django提供的数据库接口,使得我们不需要自己编写SQL语句就可以操作数据库了。

设置数据库

数据库的设置可以在jiange_blog/jiange_blog/setting.py下进行,默认使用的是sqlite3,在此我也使用这个默认的数据库即可。

DATABASES = {
 79     'default': {
 80         'ENGINE': 'django.db.backends.sqlite3',
 81         'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
 82     }
 83 }

创建数据库

编辑/jiange_blog/blog/models.py:

#coding:utf-8
from django.db import models

#用来修改admin中显示的app名称,因为admin app 名称是用 str.title()显示的,所以修改str类的title方法就可以实现.
class string_with_title(str):
    def __new__(cls, value, title):
        instance = str.__new__(cls, value)
        instance._title = title
        return instance

    def title(self):
        return self._title

    __copy__ = lambda self: self
    __deepcopy__ = lambda self, memodict: self

# Create your models here.
STATUS = {
        0: u'正常',
        1: u'草稿',
        2: u'删除',
}

class Category(models.Model):
    name = models.CharField(max_length=40,verbose_name=u'名称')
    rank = models.IntegerField(default=0,verbose_name=u'排序')
    status = models.IntegerField(default=0,choices=STATUS.items(),verbose_name='状态')

    create_time = models.DateTimeField(u'创建时间',auto_now_add=True)

    class Meta:
        verbose_name_plural = verbose_name = u'分类'
        ordering = ['rank','-create_time']
        app_label = string_with_title('blog',u"博客管理")

    def __unicode__(self):
            return '%s' % (self.name)


class Article(models.Model):
    category = models.ForeignKey(Category,verbose_name=u'分类')
    title = models.CharField(max_length=100,verbose_name=u'标题')
    en_title = models.CharField(max_length=100,verbose_name=u'英文标题')
    summary = models.TextField(verbose_name=u'摘要')
    content = models.TextField(verbose_name=u'正文')

    view_times = models.IntegerField(default=0)

    is_top = models.BooleanField(default=False,verbose_name=u'置顶')
    rank = models.IntegerField(default=0,verbose_name=u'排序')
    status = models.IntegerField(default=0,choices=STATUS.items(),verbose_name='状态')

    pub_time = models.DateTimeField(default=False,verbose_name=u'发布时间')
    create_time = models.DateTimeField(u'创建时间',auto_now_add=True)
    update_time = models.DateTimeField(u'更新时间',auto_now=True)

    class Meta:
        verbose_name_plural = verbose_name = u'文章'
        ordering = ['rank','-is_top','-pub_time','-create_time']
        app_label = string_with_title('blog',u"博客管理")

    def __unicode__(self):
            return self.title

其中的unicode(self)定义了它的显示方式,比如我输出一个models对象,它是输出id呢,还是输出name呢还是其他?就是由这个函数来定义了~

另外,记得在开头加上coding:utf-8,不然中文编码不了哦~

好了,我们更新下数据库,即把models里的定义同步到数据库中~

python manage.py makemigrations
python manage.py migrate

有了数据库,我们以后就可以对它进行一系列操作啦,至于具体的增删改查操作,这里不细说了,大家自行学习,在下面如果遇到了,我会稍微解释以下,而不在这里单独讲~

三.管理数据库:Admin

Django很好的一点就是,为我们提供了一个后台管理app,通过它,我们可以在后台进行数据库的管理!

我们查看下jiange_blog/jiange_blog/settings.py:

INSTALLED_APPS = (
    'django.contrib.admin', #默认开启了admin
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
)

那么,怎么进入后台呢? 我们查看下jiange_blog/jiange_blog/urls.py:

urlpatterns = [
    # Examples:
    # url(r'^$', 'jiange_blog.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

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

所以,我们只需要在开启我们服务的情况下,登陆http://127.0.0.1:8000/admin即可进入后台啦~

想要登陆,当然要先注册一个用户咯~

python manage.py createsuperuser 
#可以帮助我们创建一个超级用户,创建成功后就可以登陆咯~

奇怪,登陆进去之后,为什么没有看到我们的数据库呢?

别着急,我们要先在jiange_blog/blog/admin.py中进行设置:

#coding:utf-8
from django.contrib import admin
from blog.models import Article,Category
# Register your models here.

admin.site.register(Category)
admin.site.register(Article)

再次刷新后台,就可以看到我们的数据库了。

我们的数据库看起来是不是有点丑!没关系,我们可以使用bootstrap来进行美化:

pip install bootstrap-admin

然后在jiange_blog/jiange_blog/setting.py中修改INSTALLED_APPS:

INSTALLED_APPS = (
    'bootstrap_admin',  #一定要放在`django.contrib.admin`前面
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'blog',
)

BOOTSTRAP_ADMIN_SIDEBAR_MENU = True

再次打开后台,是不是好看很多?!

四.Views和url

当你在浏览器中输入http://127.0.0.1:8000/时,它就会跑到urls.py里面寻找与正则表达式”^$”(表示空串)匹配的url,进入对应的views函数中进行数据的处理,并对要返回的页面进行渲染,之后把结果返回给用户!

我们具体看一个例子:

首先看一下jiange_blog/jiange_blog/urls.py:

urlpatterns = [
    # Examples:
    # url(r'^$', 'jiange_blog.views.home', name='home'),
    # url(r'^blog/', include('blog.urls')),

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

为方便管理,我们按照它的建议,在jiange_blog/blog/下新建一个urls.py,然后修改jiange_blog/jiange_blog/urls.py,把它include进来:

from django.conf.urls import include, url
from django.contrib import admin

urlpatterns = [

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

]

我们先创建一个views,进入jiange_blog/blog/views.py:

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(request):
    return HttpResponse("Hello World, Django")

修改jiange_blog/blog/urls.py,建立映射:

from django.conf.urls import url
from blog.views import index

urlpatterns = [
        url(r'^$', index),
]

浏览器输入http://127.0.0.1:8000/ ,可以成功看到”Hello World, Django”了!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值