Py&django筆記

Start

如果py文件中有中文,文件首行必須加上# -*- coding: utf-8 -*-

Django:表格后面還有一個{% csrf_token %}的標(biāo)簽。csrf 全稱是 Cross Site Request Forgery。這是Django提供的防止偽裝提交請求的功能。POST 方法提交的表格,必須有此標(biāo)簽。

登錄檢驗封裝例子

封裝登錄狀態(tài)檢驗

def requires_login(view):
    def new_view(request, *args, **kwargs):
        if not request.user.is_authenticated():
            return HttpResponseRedirect('/accounts/login/')
        return view(request, *args, **kwargs)
    return new_view

在urls.py里調(diào)用

from django.conf.urls.defaults import *
from mysite.views import requires_login, my_view1, my_view2, my_view3

urlpatterns = patterns('',
    (r'^view1/$', requires_login(my_view1)),
    (r'^view2/$', requires_login(my_view2)),
    (r'^view3/$', requires_login(my_view3)),
)

django模型查詢

在對模型進行查詢時

query_set = Models.objects.filter(Filter)

此時只是構(gòu)建了query語句,然而并沒有進行實際的數(shù)據(jù)庫操作,當(dāng)進行

print query_set

這時候才進行實際的數(shù)據(jù)庫操作。

django文檔原文

QuerySets are lazy – the act of creating a QuerySet doesn’t involve any database activity. You can stack filters together all day long, and Django won’t actually run the query until the QuerySet is evaluated. Take a look at this example:

>>> q = Entry.objects.filter(headline__startswith="What")
>>> q = q.filter(pub_date__lte=datetime.date.today())
>>> q = q.exclude(body_text__icontains="food")
>>> print(q)

Though this looks like three database hits, in fact it hits the database only once, at the last line (print(q)). In general, the results of a QuerySet aren’t fetched from the database until you “ask” for them. When you do, the QuerySet is evaluatedby accessing the database. For more details on exactly when evaluation takes place, see When QuerySets are evaluated.

視圖渲染

  def get_absolute_url(self):
  return reverse('blog:detail', kwargs={'pk':self.pk})

由上例子可見,reverse()的第一個參數(shù)可以使的Django順利找到blog應(yīng)用下namedetail的視圖函數(shù),于是reverse會去解析這個視圖對應(yīng)的URL。reverse()函數(shù)的第一個參數(shù)中的空格會被視為合理的符號,例如app_name:indexapp_name: index中,會分別匹配到app_name應(yīng)用中的index方法和index方法,空格會被視為方法名中合理的組成部分。

動態(tài)生成URL例子

class Chain(object):

    def __init__(self, path='GET '):
        self._path = path

    def __getattr__(self, path):
        return Chain('%s/%s' % (self._path, path))

    def __call__(self,path):
        return Chain('%s/%s' % (self._path, path))

    def __str__(self):
        return self._path

    __repr__ = __str__
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容