摘要:希望自己不會(huì)錯(cuò)過什么定義模型為什么使用豐富的變量類型為了簡單,我直接編寫和官網(wǎng)一樣的例子。我直接使用命令的話,我們可以查看里面有個(gè)目錄。
學(xué)習(xí)動(dòng)力
我今年的項(xiàng)目主要基于Django開發(fā),學(xué)習(xí)了很多新東西。我很多時(shí)候,擔(dān)心日后會(huì)忘記很多有趣的東西,我想寫下筆記。但是從哪個(gè)方面入手,我沒有思路。所以查看了一些書,根據(jù)目錄進(jìn)行總結(jié)。希望自己不會(huì)錯(cuò)過什么!
定義模型
為什么使用ORM
Django豐富的變量類型
為了簡單,我直接編寫和官網(wǎng)一樣的例子。
from django.db import models class Person(models.Model): first_name = models.CharField(max_length=30) last_name = models.CharField(max_length=30)
我直接使用makemigrations命令的話,我們可以查看myapp里面有個(gè)migrates目錄。
from __future__ import unicode_literals from django.db import migrations, modelsclass Migration(migrations.Migration): dependencies = [ ] operations = [ migrations.CreateModel( name="Person", fields=[ ("id", models.AutoField(verbose_name="ID", serialize=False, auto_created=True, primary_key=True)), ("first_name", models.CharField(max_length=30)), ("last_name", models.CharField(max_length=30)), ], ), ]
從上面的代碼可以看出,系統(tǒng)不僅僅給生成first_name,last_name還有id,它的類型是AutoField類,既然學(xué)習(xí)的是類型的定義,那我現(xiàn)在可以在自己的腦海中留下一個(gè)思維圖。
好啦!我現(xiàn)在有幾個(gè)問題:
1)我一定要生成id嗎?
2)我可以修改CharField的max_length屬性,還能修改什么屬性?
3)migrations.Migration又是一個(gè)什么樣子的類呢?
現(xiàn)在執(zhí)行migrate然后查看sqlite生成的表格。
CREATE TABLE "myapp_person" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL);
現(xiàn)在又有幾個(gè)問題:
1)為什么表被命名為myapp_person,我們并沒有在哪設(shè)置這個(gè)名字???
2)我們能否使用別的域作為主鍵?
3)我們能否自定義表名?
答案如下:
1),3) 可以參考這里
我們來試試看,如何設(shè)置Meta類里面的屬性,來改變我們的表名。
class Person(models.Model): #Rest of code class Meta: db_table = "new_table"
執(zhí)行makemigrations我們會(huì)在終端得到下面的信息。
查看我們的0002文件,得到如下的內(nèi)容。
from __future__ import unicode_literals from django.db import migrations, models class Migration(migrations.Migration): dependencies = [ ("myapp", "0001_initial"), ] operations = [ migrations.AlterModelTable( name="person", table="new_table", ), ]
從上面生成的代碼可以看出,django并不是從新生成數(shù)據(jù)庫的各個(gè)域,只是修改名字而已,與我們平時(shí)使用sql語句的做法應(yīng)該是一致的。繼續(xù)運(yùn)行migrate我們查看生成的sql語句如下:
CREATE TABLE "new_table" ("id" integer NOT NULL PRIMARY KEY AUTOINCREMENT, "first_name" varchar(30) NOT NULL, "last_name" varchar(30) NOT NULL);
的確,是從新改寫了表名,我們得到了新的表名,那么如果里面已經(jīng)存有數(shù)據(jù),該表名會(huì)刪除數(shù)據(jù)嗎?為了,進(jìn)一步測試,我們先把這個(gè)類注冊(cè)到admin中。
from django.contrib import admin from .models import Person admin.site.register(Person)
記住,別忘記創(chuàng)建管理員賬戶。創(chuàng)建后就可以在管理員里面增加數(shù)據(jù)到person類啦。
然后,我們?cè)傩薷腗eta的名字,看看數(shù)據(jù)是否會(huì)被刪除。
現(xiàn)在,數(shù)據(jù)為這個(gè)。我們?cè)囍鴱男掳驯砻牧耍ǜ幕叵到y(tǒng)默認(rèn)的)
class Migration(migrations.Migration): dependencies = [ ("myapp", "0002_auto_20151213_0903"), ] operations = [ migrations.AlterModelTable( name="person", table="myapp_person", ), ]
我們這次,查看到系統(tǒng)是更加第二次修改的記錄進(jìn)行的,我們繼續(xù)看看我們的數(shù)據(jù)是否丟失。
數(shù)據(jù)還在,說明我們的django是會(huì)保護(hù)我們的數(shù)據(jù)的,我們可以放心的去做啦。
使用模型
總結(jié)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/37660.html
摘要:在里寫一個(gè)數(shù)據(jù)庫驅(qū)動(dòng)的應(yīng)用的第一步是定義模型,也就是數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)和附加的其它元數(shù)據(jù)。模型元數(shù)據(jù)是任何不是字段的東西,例如排序選項(xiàng)數(shù)據(jù)庫表名單數(shù)和復(fù)數(shù)名稱和。 Django 框架主要關(guān)注的是模型(Model)、模板(Template)和視圖(Views),稱為MTV模式。 它們各自的職責(zé)如下: 層次 職責(zé) 模型(Model),即數(shù)據(jù)存取層 處理與數(shù)據(jù)相關(guān)的所有事務(wù): 如何存取...
摘要:編程從入門到實(shí)踐筆記。執(zhí)行命令后,項(xiàng)目的根目錄下會(huì)多出一個(gè)名為的數(shù)據(jù)庫文件。下面創(chuàng)建一個(gè)主題類用戶學(xué)習(xí)的主題返回模型的字符串表示類是中的一個(gè)定義了模型基本功能的類。這種交互式環(huán)境稱為,常用語測試項(xiàng)目和排除故障。 《Python編程:從入門到實(shí)踐》筆記。從本篇開始將是該書的最后一個(gè)項(xiàng)目,將用3篇文章來介紹Django的基礎(chǔ)。完成一個(gè)學(xué)習(xí)筆記的小網(wǎng)站。 1. 前言 在本篇中,我們將: 用...
摘要:源網(wǎng)頁說明文檔所有關(guān)于你應(yīng)該且必須知道的。性能和優(yōu)化概述的兼容性旨在兼容多種不同版本的支持的兼容性地理框架打算成為世界級(jí)的地理框架。其目標(biāo)是盡可能簡單地構(gòu)建應(yīng)用程序并利用空間使能數(shù)據(jù)的功能。 源網(wǎng)頁:https://docs.djangoproject.co... django說明文檔 所有關(guān)于django你應(yīng)該且必須知道的。 第一步 你是否django編程新手,那就從此開始!從零開始...
摘要:默認(rèn)對(duì)此沒有很好的支持?jǐn)?shù)據(jù)庫結(jié)構(gòu)是由另一個(gè)工具管理的,并沒有直接修改數(shù)據(jù)庫結(jié)構(gòu)的權(quán)限。第二個(gè)思路是利用的多數(shù)據(jù)庫支持。由于使用后臺(tái)的用戶基本上只有公司內(nèi)部的業(yè)務(wù)人員,數(shù)據(jù)量不會(huì)大,用服務(wù)器級(jí)的數(shù)據(jù)庫有牛刀之嫌。 在多數(shù)項(xiàng)目中,總有一些幾乎一成不變的 CRUD 操作,編寫這些代碼很無聊,但又是整個(gè)系統(tǒng)必不可少的功能之一。我們?cè)谏弦粋€(gè)項(xiàng)目中也面臨類似的問題,雖然已經(jīng)實(shí)現(xiàn)了一個(gè)功能相對(duì)完整的...
摘要:默認(rèn)對(duì)此沒有很好的支持?jǐn)?shù)據(jù)庫結(jié)構(gòu)是由另一個(gè)工具管理的,并沒有直接修改數(shù)據(jù)庫結(jié)構(gòu)的權(quán)限。第二個(gè)思路是利用的多數(shù)據(jù)庫支持。由于使用后臺(tái)的用戶基本上只有公司內(nèi)部的業(yè)務(wù)人員,數(shù)據(jù)量不會(huì)大,用服務(wù)器級(jí)的數(shù)據(jù)庫有牛刀之嫌。 在多數(shù)項(xiàng)目中,總有一些幾乎一成不變的 CRUD 操作,編寫這些代碼很無聊,但又是整個(gè)系統(tǒng)必不可少的功能之一。我們?cè)谏弦粋€(gè)項(xiàng)目中也面臨類似的問題,雖然已經(jīng)實(shí)現(xiàn)了一個(gè)功能相對(duì)完整的...
閱讀 787·2023-04-25 20:47
閱讀 2555·2019-08-30 15:53
閱讀 960·2019-08-26 14:05
閱讀 906·2019-08-26 11:59
閱讀 1695·2019-08-26 11:43
閱讀 1694·2019-08-26 10:57
閱讀 1368·2019-08-23 18:23
閱讀 2693·2019-08-23 12:57