在django views.py代码中使用数组-这是一个好习惯吗?

时间:2020-01-19 20:20:07

标签: python django

我有几个捕获ajax请求的函数。我从请求中获取数据并将其放入数组。然后,我通过另一个函数遍历此数组,以将数据传递到上下文。该解决方案基本上可以正常工作,但这是一种好的处理方式吗?感谢任何反馈。

一段代码:

user_choices = []
@login_required
@csrf_exempt
def make_order(request):
    if request.method == "POST" and request.is_ajax():
        data = json.loads(request.body)
        for order in data["array"]:
            user_choices.append(order)
        return HttpResponse(200)
    else:
        return redirect(request, 'home')

movie = 0
seats = []
@login_required
def confirmation(request):
    if len(user_choices) > 0:
        movie = Movies.objects.get(pk=int(user_choices[0]["id"]))
        for seat in user_choices:
            seats.append(seat["row"]+":"+seat["seat"])
        context = {
            "movie":movie.title,
            "seats":seats
        }

        return render(request, "main_templates/confirmation.html", context)
    else:
        return redirect("home")

1 个答案:

答案 0 :(得分:3)

我有几个捕获ajax请求的函数。我从请求中获取数据并将其放入数组。然后,我通过另一个函数遍历此数组,以将数据传递到上下文。该解决方案基本上可以正常工作,但这是一种很好的处理方式吗?

,您引入了一个称为global state [se]的反模式。全局状态是一种严重的反模式,因为它会使程序不可预测。根据先前的请求,该列表可能已经包含数据。通常,GET请求应具有 no 副作用。通过更改列表,情况已不再如此。

此外,在这种特定情况下,这意味着如果一个用户查询数据,然后另一个用户请求数据,则第一个用户的数据“泄漏”给第二个用户。

但是,即使您设法使其变得更加安全,全局状态也会带来很多困难。这些在software engineering post中进行了讨论。虽然您当然可以每次都以手动解决这些问题为目标,但这会导致大量的工作和错误,因此,麻烦多于其应有的价值。