Infi-chu:css
http://www.cnblogs.com/Infi-chu/html
1、Django-debug-toolbarpython
django-debug-toolbar 是一組可配置的面板,可顯示有關當前請求/響應的各類調試信息,並在單擊時顯示有關面板內容的更多詳細信息。mysql
github連接:https://github.com/jazzband/django-debug-toolbarjquery
文檔連接:http://django-debug-toolbar.readthedocs.io/en/stable/git
1.安裝github
pip install django-debug-toolbar
2.配置sql
settings.py數據庫
# 將debug-toolbar添加到APP配置中 INSTALLED_APPS = [ … 'debug_toolbar', ] # 在中間件中加入DebugToolbarMiddleware MIDDLEWARE = [ # ... 'debug_toolbar.middleware.DebugToolbarMiddleware', # ... ] # 若是是本機調試,還在將127.0.0.1加入 INTERNAL_IPS INTERNAL_IPS = [‘127.0.0.1’, ]
urls.pydjango
from django.conf import settings from django.conf.urls import include, url if settings.DEBUG: import debug_toolbar urlpatterns = [ url(r'^__debug__/', include(debug_toolbar.urls)), ] + urlpatterns
配置jQuery
DEBUG_TOOLBAR_CONFIG = { "JQUERY_URL": '//cdn.bootcss.com/jquery/2.2.4/jquery.min.js', } # 若是在Django項目中使用了jquery的話就能夠直接將這一項置爲空,那麼django-debug-toolbar 就會使用你項目中用到的jquery: DEBUG_TOOLBAR_CONFIG = { "JQUERY_URL": '', }
2、表與表之間的關係
1.一對一
userinfo 表
id | name | age |
---|---|---|
1 | 張三 | 12 |
2 | 李四 | 58 |
private 表
id | salary | sp_id |
---|---|---|
1 | 100 | 1 |
2 | 400 | 2 |
models.py
class UserInfo(models.Model): name = models.CharField(max_length=32, null=True) age = models.IntegerField(null=True) class Private(models.Model): salary = models.CharField(max_length=32, null=True) sp = models.OneToOneField("UserInfo", null=True) #oneTooneField: 一對一, 默認要求該字段必須是惟一的 unique 外鍵關係
插入信息
models.UserInfo.objects.create(name='張三',age=12) models.Private.objects.create(salary=100,sp_id=1)
查詢
#從母表查詢子表中的數據 #方法1:res = models.UserInfo.objects.filter(name='張三').first().private.salary #子表表名小寫.子表字段名 #方法2:res = models.UserInfo.objects.filter(name='張三').values('private__salary') #從子表查詢母表信息 #方法1:res = models.Private.objects.filter(salary='100').first().sp.name #方法2:res = models.Private.objects.values('sp__name'):
2.一對多
3.多對多(經過關係表)
models.py
class Boy(models.Model): bname = models.CharField(max_length=30,null=True) class Girl(models.Model): gname = models.CharField(max_length=30,null=True) class Boy2Girl(models.Model): b = models.ForeignKey('Boy',null=True) g = models.ForeignKey('Girl',null=True) #聯合惟一屬性 class Meta: unique_together=[ ('b','g') ]
插入信息
import random boys =[ models.Boy(bname='男1'), models.Boy(bname='男2'), models.Boy(bname='男3'), models.Boy(bname='男4'), models.Boy(bname='男5'), models.Boy(bname='男6') ] res = models.Boy.objects.bulk_create(boys) girls =[ models.Girl(gname='女1'), models.Girl(gname='女2'), models.Girl(gname='女3'), models.Girl(gname='女4'), models.Girl(gname='女5'), models.Girl(gname='女6'), models.Girl(gname='女7'), models.Girl(gname='女8'), ] models.Girl.objects.bulk_create(girls) a = [ models.Boy2Girl(b_id=random.randint(1,6),g_id=1), models.Boy2Girl(b_id=random.randint(1,6),g_id=2), models.Boy2Girl(b_id=random.randint(1,6),g_id=3), models.Boy2Girl(b_id=random.randint(1,6),g_id=4), models.Boy2Girl(b_id=random.randint(1,6),g_id=5), models.Boy2Girl(b_id=random.randint(1,6),g_id=6), models.Boy2Girl(b_id=random.randint(1,6),g_id=7), models.Boy2Girl(b_id=random.randint(1,6),g_id=8), ] models.Boy2Girl.objects.bulk_create(a)
查詢
#經過關係表查詢,查boy位男1對於的女的信息 #方法1:res = models.Boy2Girl.objects.filter(b__bname='男1').values('g__gname') #方法2: res = models.Boy2Girl.objects.filter(b__bname='男1').all() for a in res: print(res.g.gname) #經過boy表查女的信息 #方法1: res = models.Boy.objects.filter(bname='男1').values('boy2girl__g__gname') #方法2: res = models.Boy.objects.filter(bname='男1').all() for a in res: for b in a.boy2girl_set.all(): print(b.g.gname)
4.多對多(不經過關係表)
models.py
class Boy1(models.Model): bname = models.CharField(max_length=32, null=True) g = models.ManyToManyField('Girl', null=True) #他會生成一個boy1_g的表 class Girl1(models.Model): gname = models.CharField(max_length=32, null=True)
插入信息
boys =[ models.Boy(bname='男1'), models.Boy(bname='男2'), models.Boy(bname='男3'), models.Boy(bname='男4'), models.Boy(bname='男5'), models.Boy(bname='男6') ] res = models.Boy1.objects.bulk_create(boys) # girls =[ models.Girl(gname='女1'), models.Girl(gname='女2'), models.Girl(gname='女3'), models.Girl(gname='女4'), models.Girl(gname='女5'), models.Girl(gname='女6'), models.Girl(gname='女7'), models.Girl(gname='女8'), ] models.Girl1.objects.bulk_create(girls)
創建二者關係
添加(add)
models.Boy1.objects.filter(bname='男1').first().g.add(1,2,3,4,5,2) #會自動去重保持惟一性也不會由於相同而報錯
刪除(remove)
models.Boy1.objects.filter(bname='男1').first().g.remove(1)
查詢(all)
models.Boy1.objects.filter(bname='男1').first().g.all()
清除(clear)
models.Boy1.objects.filter(bname='男1').first().g.clear() #清除全部
【注】
add進行添加時候若是有會自動去重,他自帶聯合惟一的效果
3、MySQL與Django-orm數據類型對應關係
數據類型 | mysql | djamgo-orm |
---|---|---|
數字 | tinyint | 不存在 |
- | smallint | SmallIntegerField(有符號) PositiveSmallIntegerField(沒符號) |
- | mediumint | 不存在 |
- | int (unsigned) | IntegerField(有符號)PositiveIntegerField(沒符號) |
- | bigint | BigIntegerField(有符號) PositiveBigIntegerField(沒符號) |
- | decimal | DecimalField |
- | float | FloatField |
- | double | 不存在 |
字符串 | char | 不存在 |
- | varchar | CharField |
- | text | TextField |
時間日期 | date | DateField |
- | datetime | DateTimeField |
- | timestamp | 不存在 |
4、MySQL與Django-orm數據類型對應屬性
null 數據庫中字段是否能夠爲空 db_column 數據庫中字段的列名 default 數據庫中字段的默認值 primary_key 數據庫中字段是否爲主鍵 db_index 數據庫中字段是否能夠創建索引 unique 數據庫中字段是否能夠創建惟一索引 class Meta: ### 聯合惟一索引 unique_together=[ ('b', 'g') ] #### 聯合索引 index_together = [ ('b', 'g') ]
5、Django只在admin中生效的數據類型
字符串類型
對應信息是否是郵箱格式進行驗證字符串類型
,Django Admin以及ModelForm中提供驗證 IPV4 機制字符串類型
,Django Admin以及ModelForm中提供驗證 Ipv4和Ipv6
字符串類型
,Django Admin以及ModelForm中提供驗證 URL字符串類型
,Django Admin以及ModelForm中提供驗證支持 字母、數字、下劃線、鏈接符(減號)字符串類型
,格式必須爲逗號分割的數字字符串類型
,Django Admin以及ModelForm中提供對UUID格式的驗證字符串
,Django Admin以及ModelForm中提供讀取文件夾下文件的功能
字符串類型
路徑保存在數據庫,文件上傳到指定目錄
6、Django只在admin中生效的屬性
verbose_name:Admin中顯示的字段名稱
blank:Admin中是否容許用戶輸入爲空
editable:Admin中是否能夠編輯
help_text:Admin中該字段的提示信息
choices:Admin中顯示選擇框的內容,用不變更的數據放在內存中從而避免跨表操做
error_messages: 自定義錯誤信息(字典類型),從而定製想要顯示的錯誤信息;
7、Django自帶分頁
1.導入模塊
from django.core.paginator import Paginator
2.讀取信息
userlist = models.UserInfo.objects.all()
3.生成painantor對象
生成painantor對象
paginator = Paginator(userlist, 10) #對象,每頁多少條數據
painantor的屬性與方法
4.生成page對象
生成page對象
page_1 = paginator.page(1) #第一頁的信息
page的屬性和方法
【注】
用orm得到表裏面信息的時候,它是個列表,能夠利用列表的切片技術來進行內容選取而達到分頁的效果