2015-05-19 128 views
1

過濾在我的Django應用程序的頁面之一,我有一個簡單的顯示錶中的所有員工信息的頁面:最佳實踐,在Django的

像這樣:

First Name: Last Name: Age: Hire Date: 
Bob   Johnson 21 03/19/2011 
Fred  Jackson 50 12/01/1999 

現在,我提示用戶有2個日期,我想知道是否有僱員在這兩個日期之間受僱。

對於HTTP GET我只是呈現頁面和HTTP POST我正在發送一個帶有URL中變量的URL。

我的urls.py文件中有這些模式:

('^employees/employees_by_date/$','project.reports.filter_by_date'), 
('^employees/employees_by_date/sort/(?P<begin_date>\d+)/(? P<end_date>\d+)/$', EmployeesByDate.as_view()), 

而且我filter_by_date功能如下:

def filter_by_date(request): 
if request.method == 'GET': 
    return render(request,"../templates/reports/employees_by_date.html",{'form':BasicPrompt(),}) 
else: 
    form = BasicPrompt(request.POST) 
    if form.is_valid(): 
     begin_date = form.cleaned_data['begin_date'] 
     end_date = form.cleaned_data['end_date'] 
    return HttpResponseRedirect('../reports/employees_by_date/sort/'+str(begin_date)+'/'+str(end_date)+'/') 

的代碼工作正常,問題是我新的Web開發這並不像我以正確的方式完成這件事。我想使用最佳做法,這樣任何人都可以確認我是否或以適當方式引導我按日期過濾?

謝謝!

回答

2

你說得對,以這種方式查詢你的API有點尷尬。如果您需要將員工姓名和其他內容添加到過濾器中,您最終會得到一個非常長的URL,並且不會很靈活。

您的過濾器參數(開始日期和結束日期)應作爲查詢添加到url中,而不是路徑的一部分。
在這種情況下,url將爲employees/employees_by_date/?start_date=xxx&end_date=yyy,日期可以在視圖中使用start_date = request.GET['start_date]檢索。

如果一個表單與method='get'一起使用,表單中的輸入將自動轉換爲查詢並附加在url的末尾。
如果未使用任何表單,則需要使用函數對參數進行編碼,以便能夠傳遞具有特殊字符的值,如\/ $%

1

使用Unix時間戳而不是mm/dd/yyyy日期。 unix時間戳是1970年1月1日以來的秒數。(「The Epoch」。)所以它只是一個簡單的整數。在我寫這篇文章時,Unix時間是1432071354

它們不是人類可讀的,但Unix時間戳是明確的,簡潔的,並且可以使用簡單的正則表達式[\d]+進行過濾。

您會在網絡上看到很多使用它們的API,例如Facebook。向下滾動到「基於時間的分頁」,這些數字是Unix時間戳。

mm/dd/yyyy日期的問題是不明確的。是mm/dd/yyyy(美國)?或dd/mm/yyyy(其他地方)?那麼mm-dd-yyyy