Django入門樣本之被解放的薑戈——02 莊園疑雲(資料庫及模型)

來源:互聯網
上載者:User

標籤:

 

上一章說到,薑戈的江湖初體驗:如何架設伺服器,如何回複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使用類和對象介面,來操縱底層的資料庫。

有了資料庫,就有了網站內容的大本營。

 

Django入門樣本之被解放的薑戈——02 莊園疑雲(資料庫及模型)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.