高內聚,低耦合
高內聚:一個模塊內部一個功能。
低耦合:每個模塊各司其職,盡量零關聯。
創建django項目
1、django-admin startproject hero(項目名稱)
進入hero目錄,目錄結構如下圖:
manage.py:一個命令行工具,可以使你用多種方式對Django項目進行交互
內層的目錄hero:項目的真正的Python包
_init _.py:一個空文件,它告訴Python這個目錄應該被看做一個Python包
settings.py:項目的配置
urls.py:項目的URL聲明
wsgi.py:項目與WSGI兼容的Web服務器入口
2、創建app
python manage.py startapp yy(app名稱)
3、數據庫配置
在settings.py文件中,通過DATABASES項進行數據庫設置
django支持的數據庫包括:sqlite、mysql等主流數據庫
Django默認使用SQLite數據庫
創建應用
在一個項目中可以創建一到多個應用,每個應用進行一種業務處理
創建應用的命令:
python manage.py startapp booktest
應用的目錄結構如下圖
4、定義模型類class
eg:
class BookInfo(models.Model):
???????? btitle = models.CharField(max_length=20)
????????? bpub_date = models.DateTimeField()
def __str__(self):
?????????? return "%d" % self.pk
class HeroInfo(models.Model):
????????? hname = models.CharField(max_length=20)
????????? hgender = models.BooleanField()
????????? hcontent = models.CharField(max_length=100)
????????? hBook = models.ForeignKey('BookInfo')
def __str__(self):
???????? return "%d" % self.pk
有一個數據表,就有一個模型類與之對應
打開models.py文件,定義模型類
引入包from django.db import models
模型類繼承自models.Model類
說明:不需要定義主鍵列,在生成時會自動添加,并且值為自動增長
當輸出對象時,會調用對象的str方法
生成數據表
激活模型:編輯settings.py文件,將herojob應用加入到installed_apps中
生成遷移文件:根據模型類生成sql語句,遷移文件被生成到應用的migrations目錄
5、python manage.py makemigrations
下圖是結果,當生成這個的時候,說明成功
執行遷移:執行sql語句生成數據表
6、python manage.py migrate
結果:
在Python的開發中,遇到了這個錯誤:
django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE, but settings are not configured. You must either define the environment variable DJANGO_SETTINGS_MODULE or call settings.configure() before accessing settings.
解決方法如下:
在代碼文件的最上方,添加如下代碼:
import os,django
# project_name項目名稱
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings")
django.setup()
原因:
Python啟動方式python,會啟動交互解釋器,需要告訴Django使用哪個設置文件,Django會搜索DJANGO_SETTINGS_MODULE環境變量,它被設置在settings.py中,
解決方法:用python manage.py shell來啟動命令解釋器而不是python,因為python manage.py shell中包含了Django使用哪個settings.py文件
測試數據操作
激活進入python shell,進行簡單的模型API練習
python manage.py shell
引入需要的包:
from booktest.models import *??
from datetime import *
關聯對象的操作
2、獲得關聯集合:返回當前book對象的所有hero
b=BookInfo.objects.get(pk=1)
注意:一定要寫上外鍵,否則不會關聯集合。
b.heroinfo_set.all()
查詢所有圖書信息:
BookInfo.objects.all()
新建圖書信息:
b = BookInfo()
In [7]: b.btitle = "俠客行"
In [8]: b.pub_date = datetime.today()
使用MySql數據庫
在虛擬環境中安裝mysql包
在mysql中創建數據庫
打開settings.py文件,修改DATABASES項
*****************1、在虛擬環境中安裝mysql包*****************
pip install PyMySQL
MySQLdb只適用于python2.x,發現python3上的pip裝不上。它在py3的替代品是:pip install PyMySQL
而django默認的還是使用MySQLdb:執行會報:ImportError: No module named 'MySQLdb'
解決:
在站點的項目中的eg:test1中?? __init__.py文件中添加
import pymysql
pymysql.install_as_MySQLdb()
*****************2、在mysql中創建數據庫表*****************
create database test2 charset=utf8
*****************3、修改DATABASES項*****************
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test2',
'USER': '用戶名',
'PASSWORD': '密碼',
'HOST': '數據庫服務器ip,本地可以使用localhost',
'PORT': '端口,默認為3306',
}
}
使用MySql數據庫
在虛擬環境中安裝mysql包
在mysql中創建數據庫
打開settings.py文件,修改DATABASES項
當修改model.py里邊的內容的時候,需要重新遞交的時候,需要做的步驟:
第一步:刪除migrations下的0001_initial.py文件
第二步:重新遷移文件,執行python manage.py??? makemigrations
進入mysql對其所用的數據庫進行刪除,然后在重建;