簡體   English   中英

在Django中過濾的最佳實踐

[英]Best practices to filter in 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 dev的新手,這並不覺得我正在以正確的方式完成這個。 我想使用最佳實踐,所以任何人都可以確認我或以正確的方式指導我按日期過濾?

謝謝!

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

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

如果表單與method='get' ,則表單中的輸入會自動轉換為查詢並附加到url的末尾。
如果沒有使用表單,則需要使用函數對參數進行編碼,以便能夠傳遞具有特殊字符(如\\/ $%

使用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怎么樣?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM