Django入门示例之被解放的姜戈——02 庄园疑云(数据库及模型)
上一章说到,姜戈的江湖初体验:如何架设服务器,如何回复http请求,如何创建App。这一回,我们要走入糖果庄园。
为了找到心爱的人,姜戈决定一探这神秘的糖果庄园。
1、连接数据库
- $mysql -u root -p
在MySQL中创立Django项目的数据库:
- mysql> CREATE DATABASE villa DEFAULT CHARSET=utf8;
- mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES ON villa.* TO ‘vamei‘@‘localhost‘ IDENTIFIED BY ‘vameiisgood‘;
在settings.py中,将DATABASES对象更改为:
- DATABASES = {
- ‘default‘: {
- ‘ENGINE‘: ‘django.db.backends.mysql‘,
- ‘NAME‘: ‘villa‘,
- ‘USER‘: ‘vamei‘,
- ‘PASSWORD‘: ‘vameiisgood‘,
- ‘HOST‘:‘localhost‘,
- ‘PORT‘:‘3306‘,
- }
- }
- from django.db import models
- class Character(models.Model):
- name = models.CharField(max_length=200)
- def __unicode__(self):
- return self.name
类Character定义了数据模型,它需要继承自models.Model。在MySQL中,这个类实际上是一个表。表只有一列,为name。可以看到,name属性是字符类型,最大长度为200。
- $python manage.py syncdb
同步数据库后,Django将建立相关的MySQL表格,并要求你创建一个超级用户:
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
Creating table west_character
Would you like to create one now? (yes/no): yes
Username (leave blank to use ‘tommy‘): vamei
Email address:
Password:
Password (again):
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
Installed 0 object(s) from 0 fixture(s)
- $mysql -u vamei -p
查看数据模型:
- USE villa;
- SHOW TABLES;
- SHOW COLUMNS FROM west_character;
最后一个命令返回Character类的对应表格:
+-------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(200) | NO | | NULL | |
+-------+--------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)
可以看到,Django还自动增加了一个id列,作为记录的主键(Primary Key)。
3、显示数据
数据模型虽然建立了,但还没有数据输入。为了简便,我们手动添加记录。打开MySQL命令行,并切换到相应数据库。添加记录:
- INSERT INTO west_character (name) Values (‘Vamei‘);
- INSERT INTO west_character (name) Values (‘Django‘);
- INSERT INTO west_character (name) Values (‘John‘);
查看记录:
- SELECT * FROM west_character;
下面我们从数据库中取出数据,并返回给http请求。在west/views.py中,添加视图。对于对应的请求,我们将从数据库中读取所有的记录,然后返回给客户端:
- # -*- coding: utf-8 -*-
- from django.http import HttpResponse
- from west.models import Character
- def staff(request):
- staff_list = Character.objects.all()
- staff_str = map(str, staff_list)
- return HttpResponse("<p>" + ‘ ‘.join(staff_str) + "</p>")
可以看到,我们从west.models中引入了Character类。通过操作该类,我们可以读取表格中的记录
为了让http请求能找到上面的程序,在west/urls.py增加url导航:
- from django.conf.urls import patterns, include, url
- urlpatterns = patterns(‘‘,
- url(r‘^staff/‘,‘west.views.staff‘),
- )
运行服务器。在浏览器中输入URL:
127.0.0.1:8000/west/staff
查看效果:
4、总结
Django使用类和对象接口,来操纵底层的数据库。
有了数据库,就有了站点内容的大本营。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。