Time of Update: 2016-06-06
首先,search()視圖對於Null 字元串的處理相當薄弱——僅顯示一條”Please submit a search term.”的提示資訊。 若使用者要重新填寫表單必須自行點擊[上一頁] 按鈕, 這種做法既糟糕又不專業。如果在現實的案例中,我們這樣子編寫,那麼Django的優勢將蕩然無存。在檢測到Null 字元串時更好的解決方案是重新顯示表單,並在表單上面給出錯誤提示以便使用者立刻重新填寫。 最簡單的實現方法既是添加else分句重新顯示表單,代碼如下:from django.http
Time of Update: 2016-06-06
組建一個關於書籍、作者、出版社的例子:from django.db import modelsclass Publisher(models.Model): name = models.CharField(max_length=30) address = models.CharField(max_length=50) city = models.CharField(max_length=60) state_province = models.CharField(max_length=30)
Time of Update: 2016-06-06
本文執行個體講述了Python通過Regex選取callback的方法。分享給大家供大家參考。具體如下:最近在瞎想怎麼通過xpath去精確抓取文章的本文,跟parselets類似的想法,只不過更簡單。代碼設計上採用Regex匹配URL,再選擇callback handler的方式,主要參考web.py的分發器(Dispatcher)。當然,這個實現比較老土一些,全部用function的方式回調,沒有用類。#!/bin/env pythonimport re, sys# Define
Time of Update: 2016-06-06
我們最終的視圖技巧利用了一個進階python技術。 假設你發現自己在各個不同視圖裡重複了大量代碼,就像 這個例子:def my_view1(request): if not request.user.is_authenticated(): return HttpResponseRedirect('/accounts/login/') # ... return render_to_response('template1.html')def my_view2(request): if
Time of Update: 2016-06-06
在學習了關於Form類的基本知識後,你會看到我們如何把它用到視圖中,取代contact()代碼中不整齊的部分。 一下樣本說明了我們如何用forms架構重寫contact():# views.pyfrom django.shortcuts import render_to_responsefrom mysite.contact.forms import ContactFormdef contact(request): if request.method == 'POST': form =
Time of Update: 2016-06-06
這裡以監控記憶體使用量率為例,寫的一個簡單demo性程式,具體操作根據51reboot提供的教程寫如下。一、建庫建表建立falcon資料庫:mysql> create database falcon character set utf8;Query OK, 1 row affected (0.00 sec)建立記憶體監控使用的表stat,表結構如下:CREATE TABLE `stat` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
Time of Update: 2016-06-06
在使用python 對wordpress tag 進行細化代碼處理時,遇到了調用MySQLdb模組時的出錯,由於錯誤提示和問題原因相差甚遠,查看了N久代碼也未發現代碼有問題。後來問了下師傅,被告知MySQLdb裡有一個斷接的坑 ,需要進行資料庫重連解決。一、報錯代碼及提示運行出錯的代碼如下:import MySQLdbdef getTerm(db,tag): cursor = db.cursor() query = "SELECT term_id FROM wp_terms
Time of Update: 2016-06-06
一、死結簡單來說,死結是一個資源被多次調用,而多次調用方都未能釋放該資源就會造成死結,這裡結合例子說明下兩種常見的死結情況。1、迭代死結該情況是一個線程“迭代”請求同一個資源,直接就會造成死結:import threadingimport timeclass MyThread(threading.Thread): def run(self): global num time.sleep(1) if mutex.acquire(1): num = num+1
Time of Update: 2016-06-06
Python Socket模組中包含一些有用IP轉換函式,說明如下:socket.ntohl(x) // 類似於C語言的ntohl(x)把32位正整數從網路序轉換成主機位元組序。socket.ntohs(x) // 類似於C語言的ntohs(x)把16位正整數從網路序轉換成主機位元組序。socket.htonl(x) // 類似於C語言的htonl(x)把32位正整數從主機位元組序轉換成網路序。socket.htons(x) // 類似於C語言的htons(x)把16
Time of Update: 2016-06-06
連鎖查詢通常我們需要同時進行過濾和排序查詢的操作。 因此,你可以簡單地寫成這種“鏈式”的形式:>>> Publisher.objects.filter(country="U.S.A.").order_by("-name")[, ]你應該沒猜錯,轉換成SQL查詢就是 WHERE 和 ORDER BY 的組合:SELECT id, name, address, city, state_province, country, websiteFROM books_publisherWHERE
Time of Update: 2016-06-06
時候難免需要直接調用Shell命令來完成一些比較簡單的操作,比如mount一個檔案系統之類的。那麼我們使用Python如何調用Linux的Shell命令?下面來介紹幾種常用的方法:1. os 模組1.1. os模組的exec方法族Python的exec系統方法同Unix的exec系統調用是一致的。這些方法適用於在子進程中調用外部程式的情況,因為外部程式會替換當前進程的代碼,不會返回。( 這個看了點 help(os) --> search "exec" 的相關介紹,但是沒太搞明白咋使用)1.2.
Time of Update: 2016-06-06
我們平時需要使用 Python 發送各類郵件,這個需求怎麼來實現?答案其實很簡單,smtplib 和 email 庫可以幫忙實現這個需求。smtplib 和 email 的組合可以用來發送各類郵件:普通文本,HTML 形式,帶附件,群發郵件,帶圖片的郵件等等。我們這裡將會分幾節把發送郵件功能解釋完成。smtplib 是 Python 用來發送郵件的模組,email 是用來處理郵件訊息。發送 HTML 形式的郵件發送 HTML 形式的郵件,需要 email.mime.text 中的
Time of Update: 2016-06-06
這裡以抓取 http://www.proxy.com.ru 網站的Proxy 伺服器為例,代碼如下:#!/usr/bin/env python#coding:utf-8import urllib2import reimport threadingimport timeimport MySQLdbrawProxyList = []checkedProxyList = []#抓取代理網站targets = []for i in xrange(1,42): target =
Time of Update: 2016-06-06
這玩意反反覆複弄了一晚上,這裡詳細敘述下如何安裝,肯定會對大家有所協助。首先預設大家都裝了Python,這個從官網下基本不會有任何難度。 (1)Setuptools的安裝 為啥先說這個,後面所有whl檔案都要用這個安裝。基本上沒有幾個教程先介紹這個的,這裡說全一點,方便小白使用。我們裝的是Setuptools
Time of Update: 2016-06-06
設定欄位可選在擺弄了一會之後,你或許會探索管理工具有個限制:編輯表單需要你填寫每一個欄位,然而在有些情況下,你想要某些欄位是可選的。 舉個例子,我們想要Author模組中的email欄位成為可選,即允許不填。 在現實世界中,你可能沒有為每個作者登記郵箱地址。為了指定email欄位為可選,你只要編輯Book模組(回想第五章,它在mysite/books/models.py檔案裡),在email欄位上加上blank=True。代碼如下:class Author(models.Model):
Time of Update: 2016-06-06
雖然我們一直使用書籍搜尋的樣本表單,並將起改進的很完美,但是這還是相當的簡陋: 只包含一個欄位,q。這簡單的例子,我們不需要使用Django表單庫來處理。 但是複雜一點的表單就需要多方面的處理,我們現在來一下一個較為複雜的例子: 網站聯絡表單。這個表單包括使用者提交的反饋資訊,一個可選的e-mail回信地址。 當這個表單提交並且資料通過驗證後,系統將自動發送一封包含題使用者提交的資訊的e-mail給網站工作人員。我們從contact_form.html模板入手: Contact us
Time of Update: 2016-06-06
更新多個對象例如說我們現在想要將Apress Publisher的名稱由原來的”Apress”更改為”Apress Publishing”。若使用save()方法,如:>>> p = Publisher.objects.get(name='Apress')>>> p.name = 'Apress Publishing'>>> p.save()這等同於如下SQL語句:SELECT id, name, address, city, state_province, country,
Time of Update: 2016-06-06
在實踐中,如果你使用字串技術,特別是當你的 URLconf 中沒有一個公用首碼時,你最終可能混合檢視。 然而,你仍然可以利用視圖首碼的簡便方式來減少重複。 只要增加多個 patterns() 對象,象這樣:舊的:from django.conf.urls.defaults import *urlpatterns = patterns('', (r'^hello/$', 'mysite.views.hello'), (r'^time/$',
Time of Update: 2016-06-06
說到關於要求方法的分支,讓我們來看一下可以用什麼好的方法來實現它。 考慮這個 URLconf/view 設計:# urls.pyfrom django.conf.urls.defaults import *from mysite import viewsurlpatterns = patterns('', # ... (r'^somepage/$', views.some_page), # ...)# views.pyfrom django.http import Http404,
Time of Update: 2016-06-06
每個被捕獲的參數將被作為純Python字串來發送,而不管Regex中的格式。 舉個例子,在這行URLConf中:(r'^articles/(?P\d{4})/$', views.year_archive),儘管 \d{4} 將只匹配整數的字串,但是參數 year 是作為字串傳至 views.year_archive() 的,而不是整型。當你在寫視圖代碼時記住這點很重要,許多Python內建的方法對於接受的對象的類型很講究。