django (三) 第一個django app 建立model

來源:互聯網
上載者:User

標籤:

經過上一章,我們已經建立好一個django app了,接下來,我們開始完善它。

首先,我們先瞭解些基本概念。

Django中建立的每個應用程式都是由Python的包組成,遵循某些約定。Django配有一個公用程式,自動產生一個應用程式的基本目錄結構,所以您可以專註於編寫代碼,而不是建立目錄。

那麼項目和應用程式到底有什麼區別呢?

一個app是一個web應用:比如一個部落格系統,一個簡單的投票系統。而一個項目是一個集合的配置和應用程式特定的Web網站。一個項目可以包含多個應用程式。應用程式可以存在於在多重專案。

應用程式可以放置在任何Python路徑下。在本文中,我們將應用與manage.py檔案放在同一個目錄下,以便它可以作為一個頂級模組,而不是為mysite的子模組。

所以首先,我們進入到manage.py的同級目錄下,也就是C:\mysite,輸入下面的命令:

manage.py startapp polls

polls的目錄結構如下:

polls/    __init__.py    models.py    tests.py    views.py

寫資料庫Web應用程式的第一步就是定義模型,從本質上講就是用一些額外的中繼資料,定義資料庫布局。模型需要對必要欄位和資料行為進行定義。

在我們的程式中,我們需要建立兩個模型:Poll 和 Choice,Poll包含提問和提問的日期,Choice包含投票的選項和票數的統計,每一個Choice都與一個Poll相關聯。

下面修改polls/models.py:

# -*- coding: utf-8 -*-from django.db import modelsclass Poll(models.Model):    question = models.CharField(max_length=200)    pub_date = models.DateTimeField(‘date published‘)class Choice(models.Model):    poll = models.ForeignKey(Poll)    choice_text = models.CharField(max_length=200)    votes = models.IntegerField(default=0)

 

這裡的代碼很直觀,每一個model都代表了django.db.models.Model的子類,每一個model都有一些變數,用來定義資料的類型與範圍。

每一個變數都是一個欄位的執行個體,CharField表示字串欄位,DateTimeField表示日期欄位,每個欄位執行個體(如question或pub_date)在資料庫中代表一列。你可以在第一個參數位置欄位輸入一個字串,告訴人們這個變數的含義,比如‘date published‘。有些變數你需要給他設定一些初始參數。比如IntegerField。表與表之間會有一些外鍵,可以用ForeignKey去設定。Django裡的外鍵有many-to-ones, many-to-manys and one-to-ones.

這些代碼將告訴Django做以下事情:

  • 為這個應用建立資料結構(為這些表建立聲明) .
  • 為Poll和Choice等對象建立資料介面。

做這些之前,我們首先得告訴程式,Poll應用已經建好了。修改setting.py裡的INSTALLED_APPS,向裡面添加polls如下:

INSTALLED_APPS = (    ‘django.contrib.auth‘,    ‘django.contrib.contenttypes‘,    ‘django.contrib.sessions‘,    ‘django.contrib.sites‘,    ‘django.contrib.messages‘,    ‘django.contrib.staticfiles‘,    ‘polls‘    # Uncomment the next line to enable the admin:    # ‘django.contrib.admin‘,    # Uncomment the next line to enable admin documentation:    # ‘django.contrib.admindocs‘,)

現在,程式知道polls應用已經安好,下面來執行另外一個命令:

manage.py sql polls

出現如下內容:

BEGIN;CREATE TABLE "polls_poll" (    "id" integer NOT NULL PRIMARY KEY,    "question" varchar(200) NOT NULL,    "pub_date" datetime NOT NULL);CREATE TABLE "polls_choice" (    "id" integer NOT NULL PRIMARY KEY,    "poll_id" integer NOT NULL REFERENCES "polls_poll" ("id"),    "choice_text" varchar(200) NOT NULL,    "votes" integer NOT NULL);COMMIT;

讓我們來解釋一下它:

這裡的polls_poll 和 polls_choice都是系統根據model裡的變數自動產生的,由於我們沒有設定主鍵,所以系統將主鍵設定為id.

sql命令並沒有真的去資料庫中執行SQL語句——它只是列印到螢幕上,這樣你可以看到SQL Django認為是必需的。

下面介紹幾個命令:

manage.py validate

用來檢查模型是否正確。

manage.py sqlcustom polls

輸出任何自訂SQL語句(如表的修改或為應用程式定義的約束)。

manage.py sqlclear polls

為這個應用程式輸出必要的DROP TABLE語句,根據哪些表已經存在於您的資料庫(如果有的話)。

manage.py sqlindexes polls

為這個應用程式輸出CREATE INDEX語句。

manage.py sqlall polls

上述所有命令的集合。


現在,可以為這些模型建立表了,執行:

manage.py syncdb

注意,這個命令只會為沒有建立過表app去建立新表。

django (三) 第一個django app 建立model

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.