@Koi7
Developer

Где и как хранить идентификаторы для ajax-запросов?

Есть кнопка "лайк". По нажатию отправляется асинхронный запрос для увеличения числа лайков определенного поста. Так вот где и как хранить информацию, которая поможет точно идентифицировать пост на сервере?
Сейчас делаю вот-так: использую html 5 data attributes и храню в них уникальное хэш-значение для каждого поста. Ниже пример разметки.
<i data-post-id="e48b70766ca57206e45dc4d3cee03d37" class="fa fa-heart cursor-link w3-padding-small   w3-text-gray " id="21"></i>

На сервере подсчитывается хэш на основе комбинации полей самого объекта (Python/Django):
@receiver(post_init, sender=Post)
def compute_hash(sender, instance, **kwargs):
    md5 = hashlib.md5();
    md5.update(str(instance.id) + instance.text.encode('utf-8') + str(instance.pub_datetime))
    instance.hash_id = md5.hexdigest()

Вообще чисто интуитивно подозреваю, что хранить где-то в разметке значение поля id каждого объекта не особо хорошо в плане безопасности. Поэтому использую hash. Но вот думаю, что есть какие-то стандарты, шаблоны как это все делать. Может у питона или у django есть механизмы, которые мне помогут. А может в HTML 5 есть что-то подходящее? Кто-то что может предложить - предлагайте, пожалуйста!!!!
  • Вопрос задан
  • 298 просмотров
Пригласить эксперта
Ответы на вопрос 2
@D3lphi
Храните чистый id, без всякого хэширования. Что в этом такого? Ну захешировали вы этот идентификатор и что? По вашему, пользователь не сможет "узнать" id статьи из хэша? Тогда бы уж использовали бы при хэшировании какой-нибудь, известный только вам, ключ (ИМХО, тоже особого смысла в этом нет).
Не понимаю, от чего вы тут хотите защититься?
Ответ написан
Комментировать
@blackbb
{%for item in list%}
<a href="#"   class="add-to-like"
                     data-id="{{ item.id }}"
                     {% if item in user.userprofile.liked_sentence.all %}
                     data-in_favorites="true"
                     {% else %}
                     data-in_favorites="false"
                     {% endif %}
                     data-type="sentence"
                  >
                      {% if item in user.userprofile.liked_sentence.all %}
                      <i class="fa fa-star gold" aria-hidden="true"></i>
                      {% else %}
                      <i class="fa fa-star default" aria-hidden="true"></i>
                      {% endif %}
                  </a>
{%endfor%}

id вполне хватает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы