Django 启动

创建项目

django-admin.py startproject blogs

项目目录结构:

1
2
3
4
5
6
7
blogs
├── blogs
│ ├── __init__.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── manage.py

说明:

  • manage.py:django命令行工具
  • settings.py:项目设置
  • urls.py:项目url配置
  • wsgi.py:项目web访问入口

数据库配置

  • 配置文件:blogs/blogs/settings.py

DATABASES 属性用户配置项目使用的数据库,可配置多个:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
},
'mysql': {
'ENGINE''django.db.backends.mysql',
'NAME''blogs',
'USER''user',
'PASSWORD''pwd',
'HOST''localhost',
'PORT'3306
}
}

数据库配置说明:

ENGINE: 用于指定数据库驱动
NAME: 数据库名称,若使用sqlite则为sqlite文件路径
USER: 数据库连接用户名
PASSWORD: 数据库连接密码
HOST: 数据库连接主机地址
PORT: 数据库连接端口号

  • 数据库逆向创建

若使用非sqlite数据库,则需要在逆向创建数据表前使用CREATE DATABASE dbname创建数据库,然后在使用python manage.py migrate逆向创建数据表

启动服务

python manage.py runserver 0.0.0.0:43001

创建应用

  • 初始化应用

python manage.py startapp blogsplatform

目录结构如下:

1
2
3
4
5
6
7
8
blogsplatform/
├── admin.py
├── __init__.py
├── migrations
│ └── __init__.py
├── models.py
├── tests.py
└── views.p

  • 添加应用到项目中

在blogs/blogs/setting.py的INSTALLED_APPS属性中添加创建的应用名称

1
2
3
4
5
6
7
8
9
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blogsplatform',
)

  • 创建 models

在blogsplatform/models.py中编辑文件创建db操作类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from django.db import models


class Category(models.Model):
category_name = models.CharField(max_length=250)
create_date = models.DateTimeField('date created')

def __unicode__(self):
return '%s:%s:%s' % (self.id, self.category_name, self.create_date)


class Blog(models.Model):
blog_content = models.TextField()
create_date = models.DateTimeField('date created')
category = models.ForeignKey(Category)

def __unicode__(self):
return '%s:%s:%s:%s' % (self.id, self.category.category_name, self.blog_content, self.create_date)
  • 同步数据库

生成migrations文件,用于通知django自己的model发生的变化

python manage.py makemigrations blogsplatform

查看sql语句

`python manage.py sqlmigrate blogsplatform 0001

同步数据库表

python manage.py migrate

django shell

django shell是django操作的一个命令行接口,启动时已初始化django环境

python manage.py shell

操作如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
In [1]: from blogsplatform.models import Category, Blog

In [2]: from django.utils import timezone

In [3]: category = Category(category_name='生活随笔', create_time=timezone.now())

In [4]: category = Category(category_name='生活随笔', create_date=timezone.now())

In [5]: category.save()

In [6]: Category.objects.all()

Out[6]: [<Category: 1:生活随笔:2015-05-26 01:05:21.191538+00:00>]

In [8]: category.blog_set.all()

Out[8]: []

In [9]: blog = category.blog_set.create(blog_content='test', create_date=timezone.now())

In [17]: Blog.objects.count()

Out[17]: 1

In [18]: blog.blog_content

Out[18]: 'test'

In [19]: blog.blog_content = 'test1'

In [20]: Blog.objects.all()

Out[20]: [<Blog: 1:生活随笔:test:2015-05-26 01:09:07.316380+00:00>]

In [21]: blog.save()

In [22]: Blog.objects.all()

Out[22]: [<Blog: 1:生活随笔:test1:2015-05-26 01:09:07.316380+00:00>]

In [23]: blog2 = Blog(blog_content='test2', create_date=timezone.now(), category=category)

In [24]: blog2.save()

In [25]: Blog.objects.filter(pk=2)
Out[25]: [<Blog: 2:生活随笔:test2:2015-05-26 01:16:24.733357+00:00>]

In [26]: category.blog_set.count()
Out[26]: 2

In [27]: tblog2 = category.blog_set.get(pk=2)

In [28]: tblog2.delete()

In [29]: Blog.objects.get(pk=2)

In [31]: Blog.objects.filter(blog_content__startswith='test')

Out[31]: [<Blog: 1:生活随笔:test1:2015-05-26 01:09:07.316380+00:00>]