创建app-django
@(python)
创建app
Django规定,如果要使用模型,必须要创建一个app。在上一篇中我们创建的是project,project和app的区别就是:一个project包含很多个Django app以及对它们的配置,一个app是一套Django功能的集合,通常包括模型和视图,按Python的包结构的方式存在。下面的语句创建了一个名为users的app,这个目录包含了这个app的模型models.py和视图views.py,它们都是空的。
python manage.py startapp users
会生成一个user的文件夹,里面存有的文件如下:
-rw-rw-r-- 1 linaro linaro 0 Jan 11 07:29 init.py
-rw-rw-r-- 1 linaro linaro 63 Jan 11 07:29 admin.py
drwxrwxr-x 2 linaro linaro 4096 Jan 11 07:29 migrations/
-rw-rw-r-- 1 linaro linaro 57 Jan 11 07:29 models.py
-rw-rw-r-- 1 linaro linaro 60 Jan 11 07:29 tests.py
-rw-rw-r-- 1 linaro linaro 63 Jan 11 07:29 views.py
models.py:模型文件,用 Python 类来描述数据表。
views.py:视图文件,用来联系模型与模版,主要的业务逻辑一般都写在这里。
tests.py:单元测试文件,Python的test功能很强大
定义模型
构建一个保存用户信息的数据库(名字,性别,年龄,邮箱),修改users文件夹下的model.py文件,添加一下代码
class Info(models.Model):
name = models.CharField(max_length=30)
sex = models.CharField(max_length=4)
age = models.IntegerField()
email = models.EmailField()
最后需要注意的是,我们并没有显式地为这些模型定义任何主键。 除非你单独指明,否则Django会自动为每个模型生成一个自增长的整数主键字段每个Django模型都要求有单独的主键。id
在settings.py增加users app,
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'users',
)
创建数据表
- 生成并激活model,执行
python manage.py makemigrations users
输出是
linaro@cubietruck:~/temp/mysite$ python manage.py makemigrations users
Migrations for 'users':
0001_initial.py:
- Create model Info
- 生成数据表,执行
python manage.py migrate
输出是
linaro@cubietruck:~/temp/mysite$ python manage.py migrate
Operations to perform:
Apply all migrations: users
Running migrations:
Rendering model states... DONE
Applying users.0001_initial... OK
此时dtest数据库生成两个表,如下
+-------------------+
| Tables_in_dtest |
+-------------------+
| django_migrations |
| users_info |
+-------------------+
2 rows in set (0.00 sec)
mysql> select * from django_migrations;
+----+-------+--------------+---------------------+
| id | app | name | applied |
+----+-------+--------------+---------------------+
| 1 | users | 0001_initial | 2010-01-11 07:55:33 |
+----+-------+--------------+---------------------+
1 row in set (0.00 sec)
每次修改models.py文件后都要重复以上步骤来激活models和更新数据库。
此时可以对数据表进行操作
>>> from users.models import Info
>>> Info.objects.all()
[]
>>> i = Info(name='liton',sex='male',age='18',email='[email protected]')
>>> Info.objects.all()
[]
>>> i.save()
>>> Info.objects.all()
[]
>>> i.name
'liton'
>>> i.email='[email protected]'
>>> i.save()
>>> i.email
'[email protected]'
查看数据表users_info ,可以看到新增的数据
mysql> select * from users_info;
+----+-------+------+-----+------------+
| id | name | sex | age | email |
+----+-------+------+-----+------------+
| 1 | liton | male | 18 | [email protected] |
+----+-------+------+-----+------------+
1 row in set (0.00 sec)