BOOKMS是一個公司內部的圖書管理系統。
本系列用多次迭代方法,逐步實現一個圖書管理系統BOOKMS。
本文主要介紹使用PyCharm建立Django項目,然后建立核心的領域模型。
一.建立項目
首先我們要邁出我們的第一步,使用PyCharm建立我們的BOOKMS項目,注意路徑里不能有中文,項目類型選擇Django。
因為我們項目后台管理使用admin,所以這里我們直接啟用Django admin模塊
到這里我們就在圖上的目錄里創建了一個基本的項目,可以點擊運行然后到 http://127.0.0.1:8000/看看,當然一個華麗麗的錯誤。
從模型開始開發似乎是個好主意。一方面模型是整個應用的核心,實現了應用的業務數據和對業務數據進行操作的約束,而視圖和模板只是向用戶提供操作和展現這些數據的界面;另一方面模型相對於系統的其他部分更加穩定,將模型先確定下來有助於系統其他部分的實現。DDD(領域驅動設計)更進一步將模型中的核心對象抽取出來作為“領域模型”。
從BOOKMS來看,圖書(Book) 應該是模型中的核心對象之一。就讓我們先來實現Book模型。
Django約定必須要創建app才能使用模型。這也是Django的哲學之一:
Django認為一個project包含很多個Django appl;project提供配置文件,比如數據庫連接信息、 安裝的app清單、模板路徑等等;而一個app是一套Django功能的集合,通常包括模型和視圖,按Python的包結構的方式存在。
app可以在多個project之間很容易的復用。比如Django自帶的注釋系統和自動管理界面。
接下來我們添加一個app:bookapp
cmd命令行到bookms目錄然后執行
python manage.py startapp bookapp(這里也可以使用pycharm執行 但是覺得不太好用)
最終目錄是這樣的:
二.用代碼定義模型
class Book(models.Model): class Meta: verbose_name = '圖書' verbose_name_plural = verbose_name isbn = models.CharField('ISBN',max_length=13,unique=True) title = models.CharField('書名',max_length=200) subtitle = models.CharField('副標題',max_length=200,blank=True) pages = models.IntegerField('頁數',blank=True) author = models.CharField('作者',max_length=60) translator = models.CharField('譯者',max_length=60,blank=True) price = models.CharField('定價',max_length=60,blank=True) publisher = models.CharField('出版社',max_length=200,blank=True) pubdate = models.CharField('出版日期',max_length=60,blank=True) cover_img = models.URLField('封面圖',blank=True) summary = models.TextField ('內容簡介',blank=True,max_length=2000) author_intro = models.TextField ('作者簡介',blank=True,max_length=2000) def __unicode__(self): return str(self.title)
模型如上面代碼,字段是參照豆瓣API的返回的(以后我們的圖書肯定是從豆瓣獲取數據啦……)。
三.部署模型到數據庫
Django認為所以的事情都需要你的確認,所以我們的project還需要一些配置才能工作。這里我們在bookms項目建立一個db目錄然后把我們前一篇里弄的那個bookms.db文件放進來。
然后修改配置文件settings.py, 將DATABASES改為:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': 'db/bookms.db', 'USER': '', 'PASSWORD': '', 'HOST': '', 'PORT': '', } }
然后修改配置文件settings.py,使我們的bookapp生效,將INSTALLED_APPS改為:
INSTALLED_APPS = ( 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.sites', 'django.contrib.messages', 'django.contrib.staticfiles', # Uncomment the next line to enable the admin: 'django.contrib.admin', # Uncomment the next line to enable admin documentation: # 'django.contrib.admindocs', 'BOOKMS.bookapp', )
只是在最后加入一行 'BOOKMS.bookapp',前面那堆東西是因為我們開啟了admin模塊。
然后修改一下:
LANGUAGE_CODE = 'zh-CN'
TIME_ZONE = 'Asia/Shanghai'
讓這玩意變成中文的。
然后我們來驗證一下模型:
cmd命令行到bookms目錄然后執行
python manage.py validate
0 errors found
然后可以來看看這個模型會被生成什么樣的sql,同樣在命令行執行:
python manage.py sqlall bookapp BEGIN; CREATE TABLE "bookapp_book" ( "id" integer NOT NULL PRIMARY KEY, "isbn" varchar(13) NOT NULL UNIQUE, "title" varchar(200) NOT NULL, "subtitle" varchar(200) NOT NULL, "pages" integer NOT NULL, "author" varchar(60) NOT NULL, "translator" varchar(60) NOT NULL, "price" varchar(60) NOT NULL, "publisher" varchar(200) NOT NULL, "pubdate" varchar(60) NOT NULL, "cover_img" varchar(200) NOT NULL, "summary" text NOT NULL, "author_intro" text NOT NULL ) ; COMMIT;
最后將模型導入數據庫:
python manage.py syncdb
Creating tables ...
Creating table auth_permission
Creating table auth_group_permissions
Creating table auth_group
Creating table auth_user_user_permissions
Creating table auth_user_groups
Creating table auth_user
Creating table auth_message
Creating table django_content_type
Creating table django_session
Creating table django_site
Creating table django_admin_log
Creating table bookapp_book
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 'lt'): admin
E-mail address: admin@test.com
Warning: Password input may be echoed.
Password: 123456
Warning: Password input may be echoed.
Password (again): 123456
Superuser created successfully.
Installing custom SQL ...
Installing indexes ...
No fixtures found.
因為我們啟用了admin模塊所以這里步驟稍微復雜一點,要建立一個默認的管理員賬戶。
最后我們再次run系統並瀏覽http://127.0.0.1:8000/admin/終於可以看到界面了,用admin和123456登錄看看成果吧。
四.將項目放到SVN進行版本控制
PyCharm已經集成了很多的版本控制,這里我們使用svn。