開始寫Django模組

AJframe-教你開始寫Django模組

 

Django最大的優點除了可以使用系統內建模組以外.
還可以很方便的自己寫模組!!!
以AJframe架構為例,來說明如何建立簡單的模組應用

打開你的models.py

此路徑在你新增的app底下,忘記了嗎?開始Django專案
然後引用timezone和User 模組
from django.db import models
from django.utils import timezone #引用了django 的時區
from django.contrib.auth.models import User #引用了django的 User
接下來在下面建立模組代碼如下
class Article(models.Model): #宣告 Article為一個模組要被寫入資料庫
    author = models.ForeignKey(User) #獲取user的選項
    title = models.CharField(max_length=20)#宣告title是一個限制字元為20的輸入框
    text = models.TextField() #宣告text 為一個文字輸入框
    created_date = models.DateTimeField(default=timezone.now) #宣告產生時間為現在時間
    published_date = models.DateTimeField(blank=True, null=True) #宣告發佈時間為空值,讓你自己選

    def publish(self): # 這就像是一個function,告訴系統當我們點選發佈時間後可獲得現在的時間.儲存送出獲取的時間值
        self.published_date = timezone.now()
        self.save()

    def __unicode__(self): #然後以unicode返回title的值..
        return self.title

把建立的模組引用到admin管理介面

剛剛建立好模組以後,必須有個出口作為媒介.
此時打開blog/admin.py:
from blog.models import Article #引用我們新增的Article 模組
# Register your models here.
admin.site.register(Article) #讓Article 模組顯示在管理介面中.
然後我們輸入 localhost:8000/admin 就可以看到剛剛創的模組Article和相關欄位了. 試著在管理介面新增文章看看! 當然我們也可以使用shell 來新增文章
python manage.py shell  #進入shell模式
from blog.models import Article  #引用Article模組
Article.objects.all()  #撈取Article模組元件下的所有資料.
若還沒新增文章.可以在此新增
Article.objects.create(title='AJframe title', text='test') #這樣就會直接新增一個title叫做AJframe,text叫做test的文章.
此時我們再輸入
Article.objects.all()
是不是就把剛剛新增的文章撈出來了呢??
很簡單吧!!
輸入exit() 跳出此模式

試著進階點在寫個有互動關聯的模組

 如果我們要讓所有Article都能夠選自己的分類該怎麼寫呢?
很簡單的,我們在Article模組前在寫入一個模組叫做Category
class Category(models.Model):
    name = models.CharField(max_length=20)
    def __unicode__(self):
        return self.name
原理跟剛剛一樣,不做解釋了,我們創建了一個叫做Category的模組,並且限制為有一個20字元內的欄位框.

要怎樣讓Article撈取Category,有關聯性呢?

在剛剛創建的Article下新增一個宣告
category = models.ForeignKey('Category', blank=True, null=True)
這樣就串起了Article和Category的關聯性
修改代碼如下:
class Category(models.Model):
    name = models.CharField(max_length=20)
    def __unicode__(self):
        return self.name

class Article(models.Model):
    author = models.ForeignKey(User)
    category = models.ForeignKey('Category', blank=True, null=True)
    title = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    published_date = models.DateTimeField(blank=True, null=True)

    def publish(self):
        self.published_date = timezone.now()
        self.save()

    def __unicode__(self):
        return self.title

記得到admin新增site喔!

創建好的模組要在管理介面顯示,記得打開admin.py
加入引用:
......
from blog.models import Category
.......
admin.site.register(Category)
這樣就在每個Article內增加了Category的互動了.
是不是很簡單呢~^^

模組也有層級性喔!!!!

剛剛教學中實現了每篇文章內包含分類功能.
因為文章要撈取分類,所以分類(Category)這模組要先產生.
後面文章Article才可以獲取它喔!!
這對於以後邏輯實現會很重要,一定要先弄清楚喔~^^

留言

熱門文章