MVC介紹 Django生命周期 many-to-many One-to-many Django常用字段 CharFiled 需要有max_length unique=True(代表不能重名) EmailFiled URLField ManyToManyField(哪個表) #多對多的關系 ForeignKey(哪個表) #一對多的關系 DateTimeField #精確到秒或者分 DateField #精確到天 == DurationField DecimalField #小數 FloatField SmallIntegrField TextField TimeField =======常用的屬性=== unique null=True 數據庫那里可以為空,默認不能為空。數據庫可以為空,前端不行。加上blank=True blank=True 前端那里可以為空,限制的是Django admin verbose_name=u'中文傻傻' #把字段在前端用中文顯示 choices db_index #給字段做索引(不常用) editable=False #Django前端頁面某項不能修改,消失了。。。。 error_messages help_text="help.....dddddd....." #前端告訴用戶怎么填,地下出現寫的提示 ========= 一個表對應一個類 class Author(models.Model): #作者表 first_name = models.CharFiled(max_length=32,unique=True) last_name = models.CharFiled(max_length=32) class Meta: verbose_name_plural = u'作者' #在Django中的前端把表名用中文顯示 def __unicode__(self): #py3.0的是 __str__ return 'xxxx' ====== python manager.py migrate makemigrations #做檢查生成SQL語句 migrate #執行 ========== 前端admin默認不出現准確字段,(出現的是XXX object, 如果想看到顯示的具體是什么,需要在類下寫 def __unicode__(self): #py3.0的是 __str__ return "" ========================================================================= 上面用了Django的admin對數據庫進行操作,下面是常用命令的方式 導入models模塊 默認不配置環境變量是不能導入的,可以用調試模式,如下 python manager.py shell #進入調試模式 from app01 import models models.Author.objects.all() #查找所有 last() #查找最后 修改: 先找到,在修改 改完保存 a1 = models.Author.objects.last() a1.last_name = "xxxxx" a1.save() 創建 new_author_obj = models.Author(first_name="NewNname",last_name="NewLastName") new_author_obj.save() 第二種創建方式不用在保存一次 直接會保存 new_author_obj = models.Author.objects.create(first_name="NewNname2",last_name="2NewLastName") 過濾 models.Author.objects.filter(last_name="NewLastNname",first_name="NewNname") 模糊過濾 兩個下划線 __contains 大小寫忽略 __icontains id__range=[2,4] 取id的 models.Author.objects.filter(last_name__contains="NewLastNname") 批量修改 .update models.Author.objects.filter(last_name__icontains="NewLastNname").update(last_name=“hhh”) 連鎖查詢 order_by 查詢書有多少個作者 b1 = models.Book.objects.last() b1.authors 這個時候返回出現的是一個對象,類似於<xxxxx object at xxxxx>,如果想正常顯示,需要加select_related() b1.authors.select_related() 刪除 b1.deleted()
Django forms http://www.cnblogs.com/BeginMan/archive/2013/09/06/3306081.html 1、特點 django forms是Django的表單處理庫。依賴HttpRequest,它具有如下特點: (1)、快速自動生成HTML表單 (2)、表單數據校驗 (3)、錯誤信息提示 (4)、自動轉換為python數據格式 Django中的Form一般有兩種功能 1、輸入HTML,自動生成前端表單 2、驗證用戶輸入,驗證輸入的合法性 使用 1:單獨創建一個forms文件, from django import forms class BookForm(forms.Form): name = forms.CharField(max_length=10) ...... 2:在views里把創建的forms返回給前端, form.is_valid 驗證數據 form.cleaned_data 獲取干凈的數據 去掉html那些沒用的 from app01 import forms def book_form(request): form = forms.BookForm() #生成實例 return render(request,'app01/book_form.html', {'book_form':form }) 3:然后前端調用 book_form,單獨取一個值,就是{{book_form.name}} {{book_form}} 具體事例 <form action="" method="post">{% csrf_token %} #建立form表單 做提交用 和 Ajax差不多 {{book_form}} <input type="submit" value = "創建"> </form> Blog和Entry有外鍵關聯 一對多的反向查詢 class Blog: pass class Entry: blog = modles.ForeignKey(Blog) 通過Entry獲取Blog name 為XXX的字段 models.Entry.objects.get(blog__name="xxxx") 另一種反向關聯查詢)跟這個出版社相關的書都查出來 class Publiser(models.Models): pass class Book(models.Models): publiser = models.ForeignKey(Publiser) pub_obj = models.Publiser.objects.last() print(pub_obj.book_set.select_related()) 查詢某個字段的值小與某某個字段的值 ORM F語句 >>> from django.db.models import F >>> Entry.objects.filter(n_comments__gt=F('n_pingbacks')) ORM Q語句 滿足第一個and滿足第二個,滿足第二個的第一個或第二個 Poll.objects.get( Q(question__startswith='Who'), Q(pub_date=date(2005, 5, 2)) | Q(pub_date=date(2005, 5, 6)) ) 統一自增 models.Entry.objects.update(n_pingbacks=F('n_pingbacks')+1) 表內分類聚合 values_list annotate分類統計(分類統計各項資產服務器、網絡設備各有多少台) models.Book.objects.values_list('publish_date').annotate(Count('publish_date')) OneToOneField和ForeignKey的區別 一對一和一對多 Djanog admin內顯示中文 class Meta: verbose_name = u'班級列表' verbose_name_plural = u'班級列表' #復數形式 unqiue_together = ('course','course_type','semester') #聯合為一 在自己的腳本里調用 Django models 加上環境變量就ok了 import os os.environ['DJANGO_SETTINGS_MODULE'] = 's12day16.settiongs' #s12day16 是你的setting所在的項目名 import django django.setup() form blog import models entry = models.Entry.objects.get(pk=1) print(entry)
Django用戶認證系統 擴展 Django用戶認證系統 先繼承 在擴展 from django.contrib.auth.models import User class UserProfile(models.Model): user = models.OneToOneField(User) #通過一對一的方式 引用 Django的用戶認證系統,然后下面的去擴展name school...... name = models.CharField(max_length=64) school = models.ForeignKey('School') Django中構建表結構 自己關聯自己,見例子第一個視頻35分鍾處。 models.ForeignKey('self' ,blank = True,null = true) #自己的這個表還沒創建,所以就要用引號括起來 讓字段在admin上顯示中文 verbose_name = u'漢字' consultant = models.ForeignKey('UserProfile',verbose_name=u'漢字') 或者 date = models.DateField(u'漢字',auto_now_add = True) #把u‘漢字’放到前面 Django中引用Bootstrap 1修改url,在主的URL下的跳轉到單獨項目上自己控制 url(r'^crm/', include('crm.urls') 2子項目里添加url文件,定義views文件的邏輯關系 url(r'^$',views,dashboard) 新建statics目錄,下載Bootstrap添加進去 3修改 settings文件,添加如下: STATICFILES_DIRS = [ os.path.join(BASE_DIR,"static") #'/var/www/static/' #可以寫很多個從第一個開始找,直到最后 ] 4前端文件 引用 /static/bootstrap/css/.... static而不是statics 這樣就無需關系 statics目錄修改后在去找前端一個個的修改