Django 应用程序 + 模型 + 基本数据访问
如果你只是建造一個簡單的web站點,那么可能你只需要一個app就可以了。如果是復雜的象 電子商務之類的Web站點,你可能需要把這些功能劃分成不同的app,以便以后重用。?
確實,你還可以不用創建app,例如以前寫的視圖,只是簡單的放在?views.py?,不需要app。
當然,系統對app有一個約定:如果你使用了Django的數據庫層(模型),你 必須創建一個django app。模型必須在這個app中存在。因此,為了開始建造 我們的模型,我們必須創建一個新的app。
轉到?mysite?項目目錄,執行下面的命令來創建一個新app叫做books:
在Python代碼里定義模型
我們早些時候談到。MTV里的M代表模型。Django模型是用Python代碼形式表述的數據在數據庫中的定義。對數據層來說它等同于?CREATE?TABLE?語句,只不過執行的是Python代碼而不是SQL,而且還包含了比數據庫字段定義更多的含義。Django用模型在后臺執行SQL代碼并把結果用Python的數據結構來描述,這樣你可以很方便的使用這些數據。
最后,我們要提醒你Django提供了實用工具來從現有的數據庫表中自動掃描生成模型。 這對已有的數據庫來說是非常快捷有用的。
?
在設置完setting.py的內容之后(詳見https://blog.csdn.net/anualday/article/details/52639205),現在我們可以創建數據庫表了。首先,用下面的命令對校驗模型的有效性:
python manage.py checkvalidate?命令檢查你的模型的語法和邏輯是否正確。如果一切正常,你會看到?0?errors?found?消息。如果有問題,它會給出非常有用的錯誤信息來幫助你 修正你的模型。
一旦你覺得你的模型可能有問題,運行?python?manage.py?validate?。 它可以幫助你捕獲一些常見的模型定義錯誤。
模型確認沒問題了,運行下面的命令來生成?CREATE?TABLE?語句:
python manage.py sqlall books模型安裝(摻雜django1*與2*的區別,區別很大):
?
?很多人讀了Django老版本的書籍,卻安裝了比較新的Django,以至于在使用數據庫時出了很多頭疼的問題,我也不例外,不想再讓別人繼續被折磨了。現將本人遇到的一些問題以及解決的辦法整理如下:(我的環境是Linux終端)
?
? ? ? ?一、 數據庫的配置(可以省略,用sqlite不需要):
?
? ? ? ? 1、首先你要保證在終端上安裝了數據庫(MySQL)。接下來在在里面創建你自己的數據庫,比如create database djangodb.
?
? ? ? ? 2、cd到你創建工程的目錄,我的是username/djcode/website,然后cd 到mysite里,然后vim settings.py,對這個文件中的DATABASES項進行設置,完成后大概是這樣的
?
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'django',#你使用的數據庫名字'USER': 'root','PASSWORD':'', #這里填寫你的數據庫密碼'HOST': 'localhost','PORT':'3306',}}?
?
? ? ? ?當你運行python manage.py shell時可能會遇到錯誤,比如提示你沒有mysqldb,那你應該按照Python -easy -install
?
? ? ? ?二、創建模型
?
? ? ? ?還要把你的模型放在settings.py中INSTALLED_APPS。你的模型就是你在工程目錄下執行python manage.py startapp books時創建的,名字不一定要叫books。創建完對其進行定義。然后你要激活模型,將?books?app添加到配置文件的已安裝應用列表中即可完成此步驟。設置完貌似是這樣的:
?
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','books', #不要忘記后面的逗號 這邊要重點注意下,這是2*之后的語句,如果是1*的話語句是'website/books' ]?
?
? ? ? 定義并激活了模型,你可能會驗證模型是否有效,如果我沒說錯,你可能會執行python manage.py validate ,然后你會特別傷心的看到人家提示Unknown command: 'validate'Type 'manage.py help' for usage.,對吧?所以你要用如下這個命令:python manage.py check來驗證。
?
? ? ? 然后你還想生成sql語句,你就運行了python manage.py sqlall books,錯誤提示是Unknown command: 'sqlall'Type 'manage.py help' for usage.同樣如果你想提交sql語句到數據庫而運行syncdb,錯誤提示是Unknown command: 'syncdb'
Type 'manage.py help' for usage. 為什么沒有這些命令,因為它們被淘汰了。所以你只需運行如下的命令:
?
? ??
python manage.py makemigrations books #用來檢測數據庫變更和生成數據庫遷移文件 python manage.py migrate #用來遷移數據庫 python manage.py sqlmigrate books 0001 # 用來把數據庫遷移文件轉換成數據庫語言?
?
? ? ? ? 在命令行依次執行完這三個命令你就可以進行數據訪問了。
?
? ? ? ??因為我曾經被這些問題困擾?,所以真心希望對看的這篇博客的人有所幫助。
基本數據訪問:
?
>>> from books.models import Publisher >>> p1 = Publisher(name='Addison-Wesley', address='75 Arlington Street', ... city='Boston', state_province='MA', country='U.S.A.', ... website='http://www.apress.com/') >>> p1.save() >>> p2 = Publisher(name="O'Reilly", address='10 Fawcett St.', ... city='Cambridge', state_province='MA', country='U.S.A.', ... website='http://www.oreilly.com/') >>> p2.save() >>> publisher_list = Publisher.objects.all() >>> publisher_list [<Publisher: Publisher object(1)>, <Publisher: Publisher object(2)>]?
這短短幾行代碼干了不少的事。這里簡單的說一下:
-
要創建對象,只需 import 相應模型類,并傳入每個字段值將其實例化。
-
調用該對象的?save()?方法,將對象保存到數據庫中。Django 會在后臺執行一條?INSERT?語句。
-
使用屬性?Publisher.objects?從數據庫中獲取對象。調用?Publisher.objects.all()?獲取數據庫中所有的?Publisher?對象。此時,Django 在后臺執行一條?SELECT?SQL語句。?
自然,你肯定想執行更多的Django數據庫API試試看,不過,還是讓我們先解決一點煩人的小問題。
?
添加模塊的字符串表現
當我們打印整個publisher列表時,我們沒有得到想要的有用的信息:
[<Publisher: Publisher object(1)>, <Publisher: Publisher object(2)>]我們可以簡單解決這個問題,只需要添加一個方法?__str__()?到?Publisher?對象。?__str__()?方法告訴Python要怎樣把對象當作字符串來使用。在books(models.py)中加入__str__()?, 請看下面:
1 from django.db import models 2 3 class Publisher(models.Model): 4 name = models.CharField(maxlength=30) 5 address = models.CharField(maxlength=50) 6 city = models.CharField(maxlength=60) 7 state_province = models.CharField(maxlength=30) 8 country = models.CharField(maxlength=50) 9 website = models.URLField() 10 11 def __str__(self): 12 return self.name 13 14 class Author(models.Model): 15 salutation = models.CharField(maxlength=10) 16 first_name = models.CharField(maxlength=30) 17 last_name = models.CharField(maxlength=40) 18 email = models.EmailField() 19 headshot = models.ImageField(upload_to='/tmp') 20 21 def __str__(self): 22 return '%s %s' % (self.first_name, self.last_name) 23 24 class Book(models.Model): 25 title = models.CharField(maxlength=100) 26 authors = models.ManyToManyField(Author) 27 publisher = models.ForeignKey(Publisher) 28 publication_date = models.DateField() 29 30 def __str__(self): 31 return self.title #此處需要注意的是在pycharm里面的一個table=4個spaces,而在notepad++里面就不是,需要一樣的操作才不會出錯總體思路:先創建一個app文件,然后在文件里面的models.py里面創建模型(建模),之后利用指令來驗證模型的有效性,然后在利用指令創建表,然后進入shell,利用python API將模型類實例化,添加數據并保存,數據庫中就有相應的格式的數據
轉載于:https://www.cnblogs.com/souhaite/p/10770811.html
總結
以上是生活随笔為你收集整理的Django 应用程序 + 模型 + 基本数据访问的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Windows 7 X64平台编译LLV
- 下一篇: Microsoft Power BI 学