在我的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)+'/')
代码运行正常,问题是我是网络开发人员的新手,我觉得我并没有以正确的方式完成这项工作。我想使用最佳实践,所以任何人都可以确认我或以正确的方式指导我按日期过滤?
谢谢!
答案 0 :(得分:2)
你是对的,以这种方式查询你的API有点尴尬。如果您需要将员工姓名和其他内容添加到过滤器中,您将获得一个非常长的URL,并且它不会灵活。
您的过滤器参数(开始日期和结束日期)应作为查询添加到网址中,而不是路径的一部分。
在这种情况下,网址将为employees/employees_by_date/?start_date=xxx&end_date=yyy
,并且可以使用start_date = request.GET['start_date]
在视图中检索日期。
如果表单与method='get'
一起使用,表单中的输入会自动转换为查询并附加在网址的末尾。
如果没有使用表单,则需要使用函数对参数进行编码,以便能够使用\/ $%
等特殊字符传递值。
答案 1 :(得分:1)
使用Unix时间戳而不是[\d]+
个日期。 unix时间戳是从1970年1月1日起经过的秒数。(“The Epoch”。)所以它只是一个简单的整数。在我写这篇文章时,Unix时间是 1432071354 。
它们不是人类可读的,但Unix时间戳是明确的,简洁的,可以使用简单的正则表达式mm/dd/yyyy
进行过滤。
您会看到网络上有很多API使用它们,例如Facebook。向下滚动到“基于时间的分页”,这些数字是Unix时间戳。
mm/dd/yyyy
日期的问题含糊不清。是dd/mm/yyyy
(美国)吗?还是mm-dd-yyyy
(其他地方)?那么plugins: [
(new (require('less-plugin-clean-css'))({
advanced: true,
compatibility: 'ie8'
}))
]
呢?