七日Python之路--第十二天(Django Web 開發指南)

    《Django Web 開發指南》。貌似使用Django1.0版本,基本內容差很少,細讀無妨。地址:http://www.jb51.net/books/76079.html 
html


(一)第一部分 入門python

    (1)內置數字工廠函數數據庫

        int(12.34)會建立一個新的值爲12的整數對象,而float(12)則會返回12.0。django

    (2)其餘序列操做符安全

        鏈接(+),複製(*),以及檢查是不是成員(in, not in)框架

        '**'.join('**')   或  '***%s***%d' % (str, int)函數

    (3)生成器表達式oop

        even_number = (x for x in range(1000) if x % 2 == 0)

    (4)元組網站

        tuple = ('', )  #空元組定義url

    (5)enumerate

        能讓你同時迭代和計數的函數

 for i, value in enumerate(data):
            print i, value

    (6)匿名函數

        sum = lambda x, y: x+y
        sum(a, b)

    (7)函數裝飾器 !!!

        以‘@’開頭,對函數進行‘包裝’

    (8)*args 和 **kwargs

        *args :元組或列表形式

        **kwargs :字典形式

    (9)實例化

        其餘語言通常使用new來建立實例,Python使用的是‘初始化程序’initializer 而不是‘構造函數’constructor

        即'__init__'函數

        Python還支持動態的實例屬性。能夠‘憑空’創造實例的屬性

    (10)正則 !

    (11)關於模塊

        Python有導入模塊和加載模塊之分。模塊能夠被導入屢次,但只會被加載一次。

    (12)可變性。!!!

        可變性是指對象的值可否被改變。Python對象有:類型,標示符,值

        拷貝:copy.copy()  深度拷貝:copy.deepcopy()

    (13)動態網站基礎

        通訊:http,URL,請求,響應

    (14)不要重複本身(DRY)


(二)深刻Django

    (1)定義模型

        模型變量(model field),模型類(model class),模型類元數據(model class metadata)

    (2)爲何使用ORM

        封裝有用的方法,可移植性,安全性,表現力

    (3)主鍵

        使用 AutoField(),或者在某個變量上指定 primary_key = True

    (4)模型間的關係 !!

        ForeignKey,ManyToManyField,OneToOneField

        對於反向訪問,能夠使用 **_set.all() 進行,也能夠指定 related_name = **s 來訪問。

        對於多對多關係中。也能夠經過 through = '***' 來指向一個顯式的中間模型類。在這個類上能夠添加額外的變量。

        限制關係 : limit_choices_to = dict()   

(5)模型的繼承 !!

        抽象基礎類(abstract base class)和多表繼承(multi-table inheritance)

        抽象基礎類,純Python繼承。添加 class Meta: abstract = True  #這樣不會建立數據庫表,只是用來爲其餘實體類提供屬性而存在的


    唉,剛吃完晚飯。外面竟下起了瓢潑大雨。呆在出租房裏竟有一絲的涼意。

                                                                                  --2014年08月09日21:01:08


        多表繼承,和抽象基礎類差異不大。只是再也不須要 abstract=True 這個 Meta 屬性了。

    (6)admin

    (7)使用模型

        Django項目中 manage.py 腳本包含了操做數據庫的功能。syncdb只能保證全部模型類都有對應的數據庫表,但不會修改已經存在的數據庫表。

    (8)查詢語法

        查詢由模式生成的數據庫須要兩個類 Manager和QuerySet

    (9)QuerySet  Q 和 ~Q

        使用Q關鍵字參數封裝類進一步參數化。容許你使用更復雜的邏輯。

from django.db.models import Q
        Persons.objects.filter(Q(last='Doe') | (Q(last='Smith') & Q(first='John') & ~Q(middle__startswith='W')))

    (10)用Extra調整SQL !!!

        接受四個關鍵字 : select , where , tables , params

    (11)利用Django沒有提供的SQL特性 !!!!!

        定義模式(schema) 和 定製 initial SQL 

        視圖view,觸發器trigger,級聯cascade

        以前看過一些, 後來使用的很少,基本忘記的差很少了。如今須要好好的研究一下了!

    (12)中間件 !!!

        Django的中間件就是Python的一個類,實現一個特定的接口。

    (13)url配置

        url配置中,關於參數。能夠使用 :  (/?P<param>\d{2}/) 來指定 views視圖中的參數對應關係。

    (14)手動拋異常

        try:
            person = Person.objects.get(pk=id)
        except Person.DoesNotExist:
            raise Http404

        或者使用 get_object_or_404

    (15)利用 *args / **kwargs

#在視圖函數中
def myview(*args, **kwargs):
    #這樣咱們就能夠使用,args[0]或kwargs['object_id'] 而不須要再記住 URLconf中的名稱了
##固然在 Django1.6中,徹底能夠不用在URLconf中使用 ?P<param>

    (16)Django的模板

        模板是一種獨立的文本文件,同時還包含了靜態的內容和動態標記的邏輯,循環和數據顯示等。

        模板系統一般用來生成HTML文件,但還能夠生成log文件,E-mail正文,CSV文件等任何文本格式。

        在模板中輸出context變量時,會隱式的調用unicode方法。若是試圖打印沒有__unicode__方法的對象,在模板中是不可見的。

    (17)模板過濾器

        模板過濾器。

    (18) mark- Page 121

                                                                    --2014年08月10日01:31:25   

    (17)模板過濾器

        Django提供了不少來封裝Web開發中常見的文本處理工做。

    (18)標籤

        {% for %} 中  有 : {{ forloop }} {{ forloop.first }}{{ forloop.last }}{{ forloop.counter }}

    (19)表單

        Django提供了forms庫把框架裏的三個主要組件聯繫在一塊兒:模型定義的數據庫字段,模板裏顯示的HTML表單標籤,還有檢驗用戶輸入和顯示錯誤信息的能力。

        forms.Form 和 forms.ModelForm 之分。

    (20)保存 ModelForm

        有一個save()方法,能夠將信息保存爲數據庫裏的一條記錄,而後返回Model對象結果。

        save()方法接受一個可選的參數 「 commit 」默認爲「 True 」。

new_person = form.save(commit=False)
# new_persion.attr  do somethings
new_person.save()

        關係數據庫要求目標記錄在引用前就存在!!!

        當有關聯對象時,Django會給表單添加一個額外的方法 save_m2m

     (21)區別於Model

         ModelForm的Meta嵌套類容許你定義兩個可選屬性,fields和exclude。(null=True)

    (22)Form實例初始化

form = PersonForm(initial={'name': '請輸入姓名'})

    (23)Form表單驗證

        唉 !爲了這個驗證,折騰了大半夜!!!

# 獲取文章詳細信息,包含一個CommentForm表單
def detail(req, article_id):
    if req.method == 'POST':
        form = CommentForm(req.POST)
        if form.is_valid():
            name = form.cleaned_data['name']
            address = form.cleaned_data['address']
            email = form.cleaned_data['email']
            context = form.cleaned_data['context']
            article = Article.objects.get(pk=article_id)
            comment = Comment(article=article, name=name, address=address, email=email, context=context)
            comment.save()
            return HttpResponseRedirect('dlog/detail.html')
    else:
        form = CommentForm(initial={'name': '請輸入姓名'})
    article = get_object_or_404(Article, pk=article_id)
    comments = article.comment_set.order_by('created_time')
    context = {'article': article, 'comments': comments, 'form': form}
    context.update(csrf(req))
    article.comment_count = article.comment_set.all().count()
    article.save()
    return render_to_response('dlog/detail.html', context)

        此頁面須要展現Form。當爲POST時,綁定Form與request.POST。並驗證是否有效。

        當不爲‘POST’時,只需將Form清空便可。而後處理本views要顯示的東西。

        官方文檔例子:

from django.shortcuts import renderfrom django.http import HttpResponseRedirectdef contact(request):
    if request.method == 'POST': # If the form has been submitted...
        # ContactForm was defined in the previous section
        form = ContactForm(request.POST) # A form bound to the POST data
        if form.is_valid(): # All validation rules pass
            # Process the data in form.cleaned_data
            # ...
            return HttpResponseRedirect('/thanks/') # Redirect after POST
    else:
        form = ContactForm() # An unbound form

    return render(request, 'contact.html', {
        'form': form,
    })

    (24)Widget

        控制如何顯示標籤元素的對象。

                


    看文檔不仔細啊!唉,害我折騰大半天!!

                                                                        --2014年08月10日04:13:48

相關文章
相關標籤/搜索