Django (二) 常用字段及 ORM


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目錄修改后在去找前端一個個的修改

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM