2015-05-19 77 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