Django在網頁中呼叫python小程式
使用django或python的一些web程式的好處就是,可以直接將python中的程式稍作修改直接運用於web頁面中,先如何將python的一些小程式運用於web中作一個筆記。
程式實現的功能:查詢一個大序列中某個序列出現的個數及出現位置,程式有兩個文字框表單,一個大文字框輸入需要進行查詢的序列,小文字框輸入查詢的序列KEY。一個提交按鈕,提交之後顯示結果。
1,首先,我們需要定義url,因為django對瀏覽器中的url都是有定義要求的,如圖。
我在url列表中添加了
(r’^count_sequence/$’,'sites.lab.views.count_seq’),
表示當你在瀏覽器中輸入http://localhost/count_sequence/時會觸發sites/lab/views.py裡的count_seq函式。
2,根據自己需要定義函式。程式碼如下
def count_seq(request):
#定義函式明
seq_a = request.POST.get(‘seq_a’, ”).upper()
#從瀏覽器端獲取值,這裡使用的是POST,表示不在瀏覽器地址中傳值,避免由於值太大而影響功能,同時將序列轉換為大寫,為了方便統計。
seq_c = request.POST.get(‘seq_c’, ”).upper()
seq_count = 0
#設定初始值
seq_position = 0
#設定初始值
seq_positions = ”
#設定初始值
if seq_a and seq_c:
#如果兩個文字框中都有值則執行
seq_count = seq_a.count( seq_c )
#統計序列中key的個數
seq_position = seq_a.find( seq_c )
#統計位置
while seq_position != -1:
#由於find只返回第一個值,所以此迴圈進行位置的累加
seq_positions += str(seq_position)+’|’
seq_position = seq_a.find( seq_c, seq_position+1 )
#注:這是為了順利往下累加,如果不加,程式將進入死迴圈
else:
#如果條件不成立則為空值
seq_a = ”
seq_c = ”
return render_to_response("count_sequence.html",{‘seq_a’:seq_a, ‘seq_c’:seq_c, ‘seq_count’:seq_count, ‘seq_positions’:seq_positions}) #返回的值,其中count_sequence.html為模板檔案,後面的一個dictionary分別為返回的鍵值和此函式中真實的值,即’seq_a’表示模板中呼叫的名稱,而seq_a則為此函式中的值,’seq_a’可以為其他名稱,模板中呼叫正確即可。
3,建立相應的模板檔案count_sequence.html,程式碼如下:
{% block title %}The Sequence{% endblock %}
<DIV ><form action="/count_sequence/" method="post">
#藍色字型為表單程式碼,此處的method為post,action為url中定義的/count_sequence/表示呼叫的是views裡的count_seq函式,注意要相互對應。
<textarea rows="8" cols="80" name="seq_a" >{{ seq_a|escape }}</textarea>
<br>
#注意名稱,直接導致向函式傳值
需要查詢的片段:<input type="text" name="seq_c" value="{{ seq_c|escape }}">
<br/>
<input type="submit" value="提交">
</form>
</DIV>
{% block content %}
#青色字型為表單提交後顯示結果程式碼,紅的字型均為函式render_to_response傳回的值
{% if seq_a and seq_c %}
<h2>您要統計序列中,{{ seq_c|escape }}的結果為:</h2>
序列中擁有需要統計的序列"{{ seq_c|escape }}"總共有{{ seq_count|escape }}條<br>
它們的位置分別為:{{ seq_positions|escape }}
{% endif %}
{% endblock %}
這樣,就可以從瀏覽器輸入http://localhost/count_sequence/來執行程式了。