Использование массивов в коде django views.py - это хорошая привычка? - PullRequest
1 голос
/ 19 января 2020

У меня есть пара функций, которая захватывает 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 Ответ

3 голосов
/ 19 января 2020

У меня есть пара функций, которая захватывает ajax запросов. Я получаю данные из запроса и помещаю в массив. Затем я перебираю этот массив в другой функции, например, чтобы передать данные в контекст. Это решение в основном работает, но это хороший способ сделать что-то?

Нет , вы вводите анти-шаблон под названием global state [себе] . Глобальное состояние является серьезным анти-паттерном, потому что делает программу непредсказуемой . В зависимости от предыдущих запросов список уже может содержать данные. Обычно запрос GET должен иметь никаких побочных эффектов. Изменяя списки, это уже не так.

Кроме того, в этом конкретном случае c это означает, что если один пользователь запрашивает данные, а затем другой пользователь делает запрос данных, данные Первый пользователь «просачивается» ко второму пользователю.

Но, тем не менее, даже если вам удастся сделать его более безопасным, глобальное состояние создает много трудностей. Они обсуждаются в посте по разработке программного обеспечения . Хотя вы, конечно, можете каждый раз стремиться исправить эти проблемы вручную, это приведет к большой работе и ошибкам, а, следовательно, к большим проблемам, чем оно того стоит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...