Эта функция будет сравнивать все свойства этих двух объектов одного типа. В функции takeAction
он предпримет правильное действие. Вероятно, можно было бы сделать лучше, но я нахожу это более читабельным.
let a = { name : 'same', uri: 'samee', info: 'not same'};
const b = { name : 'same', uri: 'samee', info: 'same'};
areSame(a,b);
console.log(a, b);
function areSame(a,b){
const aKeys = Object.keys(a);
for(let key of aKeys){
if(a[key] !== b[key]){
// shouldUpdate = true;
takeAction(a,b, key)
}
}
}
function takeAction(a,b, key){
switch(key){
case "name": {
a.name = b.name;
document.write('name action taken');
break;
}
case "uri": {
// parse uri
a.uri = b.uri;
document.write('uri action taken');
break;
}
case "info": {
// activation: offer.activation,
// image: offer.image
document.write('info action taken');
break;
}
}
}
При использовании Django 1.1 + просто используйте выражения F :
from django.db.models import F
...
MyModel.objects.filter(id=...).update(hit_count=F('hit_count')+1)
Это выполнит единственный атомарный запрос базы данных.
, Поскольку gerdemb говорит, необходимо полагать, что помещение этого в промежуточном программном обеспечении делает его легко допускающим повторное использование, таким образом, он не загромождает все представления.
<час>Как gerdemb говорит, необходимо записать это в промежуточное программное обеспечение для создания его действительно допускающим повторное использование. Или (более простая) запись функциональный декоратор. На самом деле существуют адаптеры для использования промежуточного программного обеспечения в качестве декоратора и наоборот.
, Но если Вы волнуетесь по поводу производительности и хотите сохранить запросы DB на страницу, обновляет минимум, можно использовать атомарную инкрементную операцию memcached. конечно, в этом случае, необходимо заботиться о персистентности сами.
Образцовые конвенции не будут атомарными; запишите это вручную:
BEGIN
SELECT * FROM table WHERE id=3 FOR UPDATE
UPDATE table SET hit_count=hit_count+1 WHERE id=3
COMMIT
Я запустил бы путем рассмотрения документации для промежуточное программное обеспечение . Комментарий Ignacio об отсутствии атомарных транзакций верен, но это - проблема со всей платформой Django. Если Вы не обеспокоены наличием 100%-го точного счетчика, я не волновался бы об этом.