zoukankan      html  css  js  c++  java
  • Django入门示例之被解放的姜戈——02 庄园疑云(数据库及模型)

    上一章说到,姜戈的江湖初体验:如何架设服务器,如何回复http请求,如何创建App。这一回,我们要走入糖果庄园。

    为了找到心爱的人,姜戈决定一探这神秘的糖果庄园。

    1、连接数据库

    Django为多种数据库后台提供了统一的调用API。根据需求不同,Django可以选择不同的数据库后台。MySQL算是最常用的数据库。我们这里将Django和MySQL连接。
    在Linux终端下启动mysql:
    1. $mysql -u root -p

    在MySQL中创立Django项目的数据库:
    1. mysql> CREATE DATABASE villa DEFAULT CHARSET=utf8;
    这里使用utf8作为默认字符集,以便支持中文。 在MySQL中为Django项目创立用户,并授予相关权限:
    1. 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对象更改为:
    1. DATABASES = {
    2.     'default': {
    3.         'ENGINE': 'django.db.backends.mysql',
    4.         'NAME': 'villa',
    5.         'USER': 'vamei',
    6.         'PASSWORD': 'vameiisgood',
    7.         'HOST':'localhost',
    8.         'PORT':'3306',
    9.     }
    10. }
    后台类型为mysql。上面包含数据库名称和用户的信息,它们与MySQL中对应数据库和用户的设置相同。Django根据这一设置,与MySQL中相应的数据库和用户连接起来。此后,Django就可以在数据库中读写了。



    2、创立模型
    MySQL是关系型数据库。但在Django的帮助下,我们不用直接编写SQL语句。Django将关系型的表(table)转换成为一个类(class)。而每个记录(record)是该类下的一个对象(object)。我们可以使用基于对象的方法,来操纵关系型的MySQL数据库。
    在传统的MySQL中,数据模型是表。在Django下,一个表为一个类。表的每一列是该类的一个属性。在models.py中,我们创建一个只有一列的表,即只有一个属性的类:
    1. from django.db import models
    2. class Character(models.Model):
    3.     name = models.CharField(max_length=200)
    4.     def __unicode__(self):
    5.         return self.name

    类Character定义了数据模型,它需要继承自models.Model。在MySQL中,这个类实际上是一个表。表只有一列,为name。可以看到,name属性是字符类型,最大长度为200。
    类Character有一个__unicode__()方法,用来说明对象的字符表达方式。如果是Python 3,定义__str__()方法,实现相同的功能。
    命令Django同步数据库。Django根据models.py中描述的数据模型,在MySQL中真正的创建各个关系表:
    1. $python manage.py syncdb

    同步数据库后,Django将建立相关的MySQL表格,并要求你创建一个超级用户:
    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
    Creating table west_character
    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 'tommy'): vamei
    Email address: 
    Password: 
    Password (again): 
    Superuser created successfully.
    Installing custom SQL ...
    Installing indexes ...
    Installed 0 object(s) from 0 fixture(s)
    数据模型建立了。打开MySQL命令行:
    1. $mysql -u vamei -p


    查看数据模型:

    1. USE villa;
    2. SHOW TABLES;
    3. 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命令行,并切换到相应数据库。添加记录:

    1. INSERT INTO west_character (name) Values ('Vamei');
    2. INSERT INTO west_character (name) Values ('Django');
    3. INSERT INTO west_character (name) Values ('John');


    查看记录:

    1. SELECT * FROM west_character;


    下面我们从数据库中取出数据,并返回给http请求。在west/views.py中,添加视图。对于对应的请求,我们将从数据库中读取所有的记录,然后返回给客户端:

    1. # -*- coding: utf-8 -*-
    2. from django.http import HttpResponse
    3. from west.models import Character
    4. def staff(request):
    5.     staff_list = Character.objects.all()
    6.     staff_str  = map(str, staff_list)
    7.     return HttpResponse("<p>" + ' '.join(staff_str) + "</p>")


    可以看到,我们从west.models中引入了Character类。通过操作该类,我们可以读取表格中的记录


    为了让http请求能找到上面的程序,在west/urls.py增加url导航:

    1. from django.conf.urls import patterns, include, url
    2. urlpatterns = patterns('',
    3.     url(r'^staff/','west.views.staff'),
    4. )


    运行服务器。在浏览器中输入URL:

    127.0.0.1:8000/west/staff


    查看效果:

    4、总结

    Django使用类和对象接口,来操纵底层的数据库。

    有了数据库,就有了站点内容的大本营。

  • 相关阅读:
    Binary Tree Zigzag Level Order Traversal
    Binary Tree Level Order Traversal
    Symmetric Tree
    Best Time to Buy and Sell Stock II
    Best Time to Buy and Sell Stock
    Triangle
    Populating Next Right Pointers in Each Node II
    Pascal's Triangle II
    Pascal's Triangle
    Populating Next Right Pointers in Each Node
  • 原文地址:https://www.cnblogs.com/zoe15/p/4423690.html
Copyright © 2011-2022 走看看