我正在制作一个airbnb网站作为一个项目,我已经创建了这个怪物(是的,我知道):
def apartment_view(request, apartment_id):
reservation = Reservation.objects.filter(apartment__pk=apartment_id)
apartment = get_object_or_404(Apartment, pk=apartment_id)
context = {}
context['apartment'] = apartment
unavailable = []
for start, end in apartment.reservations.values_list('start_date', 'end_date'):
while start <= end:
unavailable.append(start.strftime('%-d-%m-%Y'))
start += datetime.timedelta(days=1)
form = ReservationForm()
context['unavailable_dates'] = json.dumps(unavailable)
context['form'] = form
if request.method == 'GET':
form = ReservationForm()
if request.method == "GET":
form = ReservationForm(request.GET)
if form.is_valid():
context = {}
reservation = form.save(commit=False)
reservation.apartment = apartment
start_date = request.GET.get('start_date', None)
end_date = request.GET.get('end_date', None)
sdate = datetime.datetime.strptime(start_date, '%Y-%m-%d') #start
edate = datetime.datetime.strptime(end_date ,'%Y-%m-%d') #end
prices_by_date = apartment.price_by_date(sdate, edate)
user_dates = [sdate + datetime.timedelta(days=x) for x in range((edate-sdate).days + 1)]
user_date_list = []
for day in user_dates:
user_date_list.append(day.strftime('%d,%m,%Y'))
context['price_per_day'] = prices_by_date.price
context['total_price'] = len(user_date_list) * prices_by_date.price
context['unavailable_dates'] = json.dumps(unavailable)
context['form'] = form
context['apartment'] = apartment
context['date_start'] = start_date
context['date_end'] = end_date
form.save()
return render(request, "booking/apartment.html", context)
elif request.method == 'POST':
form = ReservationForm(request.POST)
if form.is_valid():
reservation = form.save(commit=False)
reservation.apartment = apartment
reservation.save()
form.save()
HttpResponseRedirect(reverse('booking:apartment', kwargs={"apartment_id": apartment.pk}))
return render(request, 'booking/apartment.html', context)
为了描述发生了什么,用户首先来到这个站点,选择开始和结束日期来预订公寓。他们按下按钮来计算预订的总价,页面被刷新并显示价格。 然后他们点击一个“确认预订”按钮,对预订进行post请求,页面再次刷新,现在显示“感谢您的预订”文本。你知道吗
我有什么办法可以改善这种看法吗?我已经尽力了,我还在学django。我也许应该把它改成基于类的视图,但是我不知道怎么做,这很让人困惑。你知道吗
我真的很感谢你的帮助,非常感谢!你知道吗
一个建议是了解Django中基于类的视图。这将有助于减少您必须一直执行的一些样板代码(如果请求.方法==“发布”,表格.u有效吗()等)。这些类还有助于组织代码。下面是一个很好的资源,可以帮助您使用基于类的视图:Classy Class Based Views
另一个建议是阅读安迪·亨特和戴夫·托马斯的The Pragmatic Programmer。这确实有助于您考虑如何规划代码以及如何考虑未来可能的更改等。它还讨论了枯燥的原则(不要重复自己)。你知道吗
就您的代码而言,我建议您将一些逻辑拆分为更小的函数。您还将在POST之前实例化
ReservationForm
,然后在POST内部再次实例化它(重复代码)。您还有重复的if request.method == "GET":
。你知道吗这不是这里的问题,而是Code Review Stack Exchange
相关问题 更多 >
编程相关推荐