django相關字段解釋(slug)


1、slug:用於生成一個有意義(valid, meaninful)URL  參考(http://stackoverflow.com/questions/427102/what-is-a-slug-in-django)

比如:http://stackoverflow.com/questions/427102/what-is-a-slug-in-django  后面的“what-is-a-slug-in-django”就是經過slug后的產物

如何使用:

需要使用slugify功能:from django.utils.text import slugify

例子:slugify(value)  If value is "Joel is a slug", the output will be "joel-is-a-slug".

2、SlugField:也是起到類似作用,只不過這個一般是后台直接添加時使用,比如:slug = models.SlugField(unique=True)   這樣在后台就有個slug框,填寫后,URL中就包含slug中的內容。

3、pre_save:被保存進數據庫前的預存儲。  前面使用slug有一個問題,slug是從title中取值,但還沒保存進數據庫如何取?pre_save就起到這樣的作用,保存開始前會發出信號,我們利用發出的信號,經過函數來進行 “准備數據”。函數(接收器)接受這個信號的方法有兩個:一是connect方法,另一個是使用receiver() 裝飾器來自動連接

from django.db.models.signals import pre_save

pre_save.connect(pre_save_post_receiver, sender=Post)

參考:http://python.usyiyi.cn/django/topics/signals.html#receiver-functions

http://stackoverflow.com/questions/6461989/populating-django-field-with-pre-save

http://python.usyiyi.cn/django/topics/signals.html

(保存時發生的事情:http://sns.hwcrazy.com/django/ref/models/instances/index.html)

 

4、從url到最后的創建成功

url.py:
  url(r'^create/$', post_create)----------匹配視圖post_create
views.py:
  from .forms import PostForm-------------關聯到form
  def post_create(request):
     form = PostForm(request.POST or None, request.FILES or None)
form.py
from .models import Post
class PostForm(forms.ModelForm):
    class Meta:
        model = Post -------------關聯到Post類
models.py
pre_save.connect(pre_save_post_receiver, sender=Post) ------sender – 指定一個特定的sender,來從它那里接受信號

最后返回slug

 

5、manager:

    1、模塊manager是一個對象(類),Django模塊通過它進行數據庫查詢。 每個Django模塊至少有一個manager,你可以創建自定義manager以定制數據庫訪問。在modles.py中,如果我們沒有特別定義,默認manager(objects)將會被自動創建,即常見的這個Post.objects.all()。

    2、我們可以自定義manager以定制數據庫訪問

class PostManager(models.Manager):
    def active(self, *args, **kwargs):
        return super(PostManager, self).filter(draft=False).filter(publish__lte=timezone.now())

my_objects = PostManager() # 如果是objects,那就會替換默認的objects

這樣之后,我們就可以通過Post.myobjects.all()來訪問過濾之后的數據了

參考:http://www.jb51.net/article/69767.htm

 

6、super:

上邊的super(PostManager, self).filter(),,中的super,它會找出PostManager所繼承的類,首先找到的filter方法來進行。這里涉及到繼承中的方法解析順序(MRO)。

MRO分兩類

經典類:從左到右的深度優先查找

新式類:它仍然采用從左至右的深度優先遍歷,但是如果遍歷中出現重復的類,只保留最后一個

參考:http://hanjianwei.com/2013/07/25/python-mro/          http://stackoverflow.com/questions/7141820/use-of-python-super-function-in-django-model

 


免責聲明!

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



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