LINUX.ORG.RU

Сообщения djnoob

 

Одноклассники api - Как сичтать sig?

Господа, подскажите, как считать сигнатуру для клиент-сервер запроса для сервиса «одноклассники»?

Положим есть REST-запрос вида:

http://api.odnoklassniki.ru/api/friends/get?access_token=12345&applicatio...?

Как посчитать sig? В доке написано, что это должен быть md5 hash вех параметров запроса + secret_key. Но это нифига не срабатывает - пишет, что неправильно сформирована сигнатура.

Поясните, пожалуйста, как вообще она составляется, пример, если можно.

 

djnoob
()

Perl. «Развернуть» хеш из строки.

Я сам в перле новичок, поэтому просьба не пинать за ламерский вопрос).

Как можно организовать универсальную функцию, которая «разворачивает» хеш из строки? Если уже есть что-то подобное - дайте ссылку.

Например, в искомую функцию передается строка:

"test1.test2"

и функция преобразует ее и делает запрос к хешу вида:

$my_hash{"test1"}->{"test2"}

Как, собственно говоря, реализовать нечто подобное?

Заранее спасибо.

 

djnoob
()

Perl. Вырезать строку между пробелами.

Как составить регулярку, чтобы вырезать строку, находящуюся между пробелами.

Такое:

/\s(.*?\s/)


не работает.

 ,

djnoob
()

Perl. Конвертировать в юникод.

Подскажите, как можно сконвертировать данные вида :

%D0%91%D0%B5%D0%BB%D0%B3%D0%BE%D1%80%D0%BE%D0%B4

в удобочитаемую строку юникод?

 , ,

djnoob
()

Perl. Помогите составить регулярку.

Обращение к знатокам регулярок.

Есть строка:

[01.04.2014] some key: test&val=целевой_текст&some_options

Помогите, пожалуйста, составить регулярку, для «вытаскивания» целевого текста из вышеприведенной строки.

Заранее спасибо.

 ,

djnoob
()

Померить скорость загрузки статики.

Всем привет!

Вcтала задача замерит скорость отдачи статики от сервера на примере небольших (до мегабайта) изображений в формате JPEG.

Подумал и решил делать замер между подстановкой пути до файла в тег <img> и моментом срабатывания события onload для этого элемента.

Вопрос, получу ли я таким образом время задержки при отдачи статики от сервера до моего компа?

 , , ,

djnoob
()

Сменить права на каталог.

Всем привет.

Произошел какой-то НЕХ. Не могу зайти в каталог (cd)/сменить права на него (chmod -R 777)/ Просмотреть владельца (ls -la) - отказано в доступе.

Вопрос - какого фига, я же root?

 , ,

djnoob
()

Разрешить пользователю перезапускать apache и mysql

Всем доброго времени суток!

Добрые админы, подскажите, как сделать так (как разрешить), рядовому пользователю (c именем, скажем, vasya) останавливать/запускать apache и mysql?

 , , ,

djnoob
()

Perl. Регулярки.

Подскажите, как написать регулярку, вибирающую все символы между % и %.

%
text
texxxxt
texxxxxxxt
%

%
also text
sample text
regexp
%

...

Конструкция вида:

/\%(.*?)\%/

не работает.

Заранее спасибо.

 ,

djnoob
()

Javascript и проблема асинфронности.

Всем привет!

Есть два изображения, которые создаются из js и добавляются в DOM. Нужно по окончанию загрузки обоих изображений (на onload()) выполнит определенное действие. Как, собственно, этого можно добиться. К слову, два изображения, это пример, а на деле их может быть больше.

     var image1 = new Image();
     image1.style.display="none";
     $("body").append(image1);
     image1.onload = function() {
       // some code
     };
     image1.src = "1.jpg";



     var image2 = new Image();
     image2.style.display="none";
     $("body").append(image2);
     image2.onload = function() {
     // some code
     };
     image2.src = "2.jpg";
     }
     

 , ,

djnoob
()

Perl. Доступ к значениям массива хешей.

Приветствую вас снова, многоуважаемые Perl-хакеры. Помогите разобраться с задачей.

Есть огромный массив хешей вида:

@hash_list = (
    ...
    {
        "field1": 123,
        "field2": 321,
    },
    {
        "field1": 456,
        "field2": 654,
    },
    ...
);

Перебрать массив и для каждого хеша проверить значение по ключу field1.

Собственно вопрос, как релизовать перебор значений массива хешей по ключу «field1»?

 ,

djnoob
()

Perl. Отсортировать числовые значение ключей хеша по возрастанию

Всем привет.

В перле не шарю.

Помогите, кто знает.

Есть хеш вида:

%tmp = (
  "key1": 3,
  "key2": 6,
  "key3": 1,
  ...
)

Как отсоритровать пары хеша по возрастанию значений?

 ,

djnoob
()

Экспертам по Django

Все доброго времени суток.

Заранее извиняюсь за пафосный заголовок и, возможно, ламерский вопрос.

Проблема связана с обработкой форм при использовании Django.

Как быть, когда нужно, например: обрабатывать форму входа на сайт, если форма находится в модальном окне и появляется в результате нажатия на некоторую кнопку (скажем, в хедере сайта), а хедер наследуется всеми страницами.

Для одной страницы все просто: создаем экземпляр класса Form, описываем необходимые нам поля, виджеты; во вьюху, рендерящую главную страницу добавляем контекст для рендеринга нашей формы входа а также код валидации этой формы и выборки данных из нее.

def index(request):
    if request.method == "POST":
        form = LoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
            else:
                return HttpResponse(u"Ошибка авторизации!")
    else:
        form = LoginForm()
    return render(request, "pages/index.djhtml", {"form": form})

Но ведь нам нужно, чтобы форма рендерилась и обрабатывалась не только на главной, а на любой странице сайта. Добавлять код обработки формы во все вьюхи - бред. Использовать шаблонные теги - не вариант. А если есть есть несколько форма (форма входа и форма регистрации нового пользователя). И их нужно показывать и обрабатывать на всех страницах.

Может вообще забить на django'вский механизм обработки форм и просто обрабатывать данные из POST? Но чувствую, что не тру это.

Кто что подскажет?

 , ,

djnoob
()

Restful API - получить только n - первых записей

Всем привет!

Есть Restful API, в котором предусмотрена выдача как всех записей, так и только определенной записи:

/service/api/v1/entries/ - все записи
/service/api/v1/entries/n - n-я запись

Нужно получить первые десять записей.

Можно конечно получить сразу все записи и сделать сплайс только десяти первых. Но вдруг всех записей, например, миллиард? Зачем нам тянуть лишние?

Подумал я так и решил в цикле от 1 до 10 получать по одной записи:

var i = 1;

for (i; i < 11; i++) {
    $.ajax({
        method: "GET",
        url: "/service/api/v1/entries/" + i + "/",
        dataType: "json",
        success: function(response) {
            ...
            console.log(response);
        }
        ...
    });
}

Но в таком случе данные прихоядт непоследовательно (друг за другом), а в разнобой, например, сначала приходит запись с id=1, потом с id=7, потом с id=3 и т.п.

Посему вопроc: как используя асинхронныю функцию ajax() получать даные четко последовательно, одно за другим? Есть какие-нибудь best practices?

 , ,

djnoob
()

Django и фильтр через Q = Error «too many values to unpack»

Всем привет!

Не понятно, почему вылетает exception при попытке поиска по записям таблицы.

views.py

    class SearchResultView(ListView, ProcessFormView):
        ...
    
        def get(self, request, *args, **kwargs):
            return super(SearchResultView, self).get(request, *args, **kwargs)
    
        def post(self, request, *args, **kwargs):
          
            self.search_form = SearchForm(self.request.POST or None)

            if self.search_form.is_valid():
                search_term = u"%s" % self.search_form.cleaned_data['search_term']
                g_list = None

                if search_term:

                    try:
                        g_list = Gallery.objects.filter(
                            Q(article__icontains=search_term) |
                            Q(category__title__icontains=search_term) |
                            Q(tags__tag__icontains=search_term)
                         )
                    except ValueError as e:
                        print("Error! ", e.message)
                    
                return g_list

            else:
                return super(SearchResultView, self).post(request, *args, **kwargs)
    
        ...

Получаю ошибку:

    too many values to unpack
    
    Request Method: 	POST
    Request URL: 	http://127.0.0.1:8000/gallery/search_result/
    Django Version: 	1.7.5
    Exception Type: 	ValueError
    Exception Value: 	
    
    too many values to unpack
    
    Exception Location: 	/.../lib/python2.7/site-packages/django/db/models/sql/query.py in build_filter, line 1179
    Python Executable: 	/.../bin/python
    Python Version: 	2.7.9

Хотя, если выполнить запрос:

g_list = Gallery.objects.filter(
    Q(article__icontains=search_term) |
    Q(category__title__icontains=search_term) |
    Q(tags__tag__icontains=search_term)
)
из консоли django, то все нормально работает.

В чем может быть проблема?

 ,

djnoob
()

Djnago, ajax - error 405!

Всем привет!

Решил вынести все вьюхи, вызываемые посредством ajax, в отдельный файл - ajax.py. После этого все сломалось:(

Теперь при попытке отработать ajax-вьюху, в консоле получаю ошибку 405!

ajax.py

@csrf_exempt
def get_categories_by_type(request):
    """
    :param request
    :return:
    """
    print("DEBUG")
    ...
    response = ...
    return HttpResponse(json.dumps(response), content_type="application/json")

urls.py

 # Ajax views
 ...
 url(r"^get_categories_by_type/$", get_categories_by_type, name="get_categories_by_type"),

app.js

var csrftoken = $.cookie('csrftoken');

function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}

$.ajaxSetup({
    beforeSend: function(xhr, settings) {
        if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
                    xhr.setRequestHeader("X-CSRFToken", csrftoken);
        }
    }
});

...

getCategoryList: function() {
    var data = {...};
    $.ajax({
        type: "POST",
        url: "/get_categories_by_type/",
        data: data,
        dataType: "json",
        success: function(data) {
            ...
        }
    });
},

"POST /get_categories_by_type/ HTTP/1.1" 405 0

Что за НЕХ такой(?

 , , , ,

djnoob
()

Django CustomUser model!

Пытаюсь создать свою модель и систему авторизации пользователей (по email и password) в джанго. Взял пример из оф. документации, определил нужные мне поля модели и админки. Создал пользователя через syncdb, защел в админку - все норм, но при попытке создания нового пользователя через админку, получаю ошибку:

ValueError at /admin/accounts/myuser/add/
too many values to unpack

В чем может быть проблема, ткните пальцем), пожалуйста!

models.py:

class MyUserManager(BaseUserManager):
    def create_user(self, email, password=None):
        if not email:
            raise ValueError(u'У пользователя обязательно должен быть указан e-mail!')
        user = self.model(email=self.normalize_email(email),)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, password):
        user = self.create_user(email, password=password,)
        user.is_admin = True
        user.save(using=self._db)
        return user


class MyUser(AbstractBaseUser):
    email = models.EmailField(u'E-mail', max_length=128, unique=True)
    firstname = models.CharField(u"Имя", max_length=64, blank=True)
    lastname = models.CharField(u"Фамилия", max_length=128, blank=True)
    post = models.CharField(u"Должность", max_length=256, blank=True)
    phone = models.CharField(u"Телефон", max_length=32, blank=True)
    key = models.CharField(u"UID", max_length=64, unique=True)
    is_boss = models.BooleanField(u"Руководитель (босс)", default=False)
    is_poweruser = models.BooleanField(u"Опытный пользователь", default=False)
    is_simpleuser = models.BooleanField(u"Обычный пользователь", default=False)
    is_active = models.BooleanField(u"Действующий пользователь", default=True)
    is_admin = models.BooleanField(u"Админ", default=False)

    objects = MyUserManager()

    USERNAME_FIELD = 'email'

    class Meta:
        verbose_name = u"пользователя"
        verbose_name_plural = u"Пользователь"

    def save(self, *args, **kwargs):
        if not self.key:
            hash_str = "%s + %s" % (self.email, str(datetime.utcnow()))
            self.key = md5(hash_str).hexdigest()
            super(MyUser, self).save(*args, **kwargs)

    def get_hash_key(self):
        return self.key

    def get_full_name(self):
        return self.email

    def get_short_name(self):
        return self.email

    def __unicode__(self):
        return u"%s" % self.email

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True

    @property
    def is_staff(self):
        return self.is_admin

admin.py:

class UserCreationForm(forms.ModelForm):
    password1 = forms.CharField(label=u'Пароль', widget=forms.PasswordInput)
    password2 = forms.CharField(label=u'Подтверждение пароля', widget=forms.PasswordInput)

    class Meta:
        model = MyUser
        fields = ('email',)

    def clean_password2(self):
        password1 = self.cleaned_data.get("password1")
        password2 = self.cleaned_data.get("password2")
        if password1 and password2 and password1 != password2:
            raise forms.ValidationError(u"Пароли не совпадают")
        return password2

    def save(self, commit=True):
        user = super(UserCreationForm, self).save(commit=False)
        user.set_password(self.cleaned_data["password1"])
        if commit:
            user.save()
        return user

class MyUserAdmin(UserAdmin):
    add_form = UserCreationForm

    fieldsets = (
        (u"Пользователь", {'fields':
            ('email', 'password', 'key')
        }),
        (u'Личная информация', {'fields':
            ('firstname', 'lastname', 'post', 'phone')
        }),
        (u'Права доступа', {'fields':
            ('is_admin', 'is_boss', 'is_poweruser', 'is_simpleuser')
        }),
    )
    add_fieldsets = (
        (u"Создание нового пользователя", {
                'classes': ('wide',),
                'fields':
                    (
                        'email', 'password1', 'password2', ('firstname', 'lastname'), ('post', 'phone'),
                        ('is_boss', 'is_poweruser', 'is_simpleuser')
                    )
            }
        )
    )
    list_display = list_display_links = ('firstname', 'lastname', 'email', 'is_admin',)
    list_filter = ('is_admin',)
    search_fields = ('email',)
    ordering = ('email',)
    filter_horizontal = ()


admin.site.register(MyUser, MyUserAdmin)
admin.site.unregister(Group)

 , , ,

djnoob
()

Postfix и два домена

Всем привет!

Я в администрировании новичек. Вот встала задача настроить почтовый сервер postfix для работы с двух доменов (domen1.ru и domen2.ru). Для первого домене все отлично работает, а со вторым - нифига. Подскажите, что нужно для этого сделать? Привожу кусок /etc/postfix/main.cf:

transport_maps = proxy:mysql:/etc/postfix/mysql/transport_maps_user.cf, proxy:mysql:/etc/postfix/mysql/transport_maps_domain.cf
virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql/virtual_mailbox_domains.cf
virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql/virtual_mailbox_maps.cf
virtual_alias_maps = proxy:mysql:/etc/postfix/mysql/virtual_alias_maps.cf, proxy:mysql:/etc/postfix/mysql/domain_alias_maps.cf, proxy:mysql:/etc/postfix/mysql/catchall_maps.cf, proxy:mysql:/etc/postfix/mysql/domain_alias_catchall_maps.cf
sender_bcc_maps = proxy:mysql:/etc/postfix/mysql/sender_bcc_maps_user.cf, proxy:mysql:/etc/postfix/mysql/sender_bcc_maps_domain.cf
recipient_bcc_maps = proxy:mysql:/etc/postfix/mysql/recipient_bcc_maps_user.cf, proxy:mysql:/etc/postfix/mysql/recipient_bcc_maps_domain.cf
relay_domains = domain1.ru domain2.ru

 , ,

djnoob
()

Подскажите по хэш-навигации!

Всем привет!

Нифига непонятно как работать с хеш-навигацией. Есть у меня одна ссылка, по нажатию на которую происходит запрос к серверу, по средством ajax, и берутся данные. Но после этого браузерные кнопки назад/вперед не работают. Т.е. после взятия этих данных, я не могу вернуться на страницу назад. Как реализовать «сохранение состояний» страниц? Если можно, маленький пример в тудию, пожалуйста.

Вот есть ссылка, по нажатию на которую (ajax) берутся данные с сервера.

<a id="getData" href="#some-name">Example</a>
// код - обработчик нажатия на эту ссылку
// в адресной строке браузера получаю: http://mysite.ru/#some-name
$("getData").click(function() {

    // ajax запрос
});

 , , ,

djnoob
()

Backbone.js! Всем биться головой о стенку!

Есть, популярная на ЛОР'e, связка django-tastypie + backbone.js.

Суть проблемы такова. При попытке удалить объект модели и соответственно объект из БД, получаю тривиальную ошибку - 404 NOT FOUND! Но не пойму почему? Подскажите, люди знающие, где здесь ошибка зарылась?

resources.py

class UserResources(ModelResource):
    class Meta:
        queryset = User.objects.all()
        resource_name = "users"
        allowed_methods = ['get', 'post', 'put', 'delete']
        excludes = [
            'email', 'password', 'is_superuser', 'date_joined', 'first_name',
            'is_active', 'is_staff', 'last_login', 'last_name'
        ]
        filtering = {
            'id': ALL,
        }
        authorization = Authorization()
        always_return_data = True



class EntryResource(ModelResource):
    user = fields.ForeignKey(UserResources, 'user', full=True)

    class Meta:
        queryset = Entry.objects.all()
        allowed_methods = ['get', 'post', 'put', 'delete']
        resource_name = 'entries'
        filtering = {
            'id': ALL,
            'user': ALL_WITH_RELATIONS
        }
        authorization = Authorization()
        always_return_data = True

app.js

...

var UserModel = Backbone.Model.extend({
    urlRoot: "/users/"
});

var ProjectModel = Backbone.Model.extend({
    urlRoot: "/entries/"
});

...

var DeleteEntryView = Backbone.View.extend({
    el: "#entry-content",
    events: {
        "click #confirm-delete-entry-btn": "deleteEntry",
        "click #cancel-delete-entry-btn": "cancel"
    },
    template: _.template( $("#delete-entry-template").html() ),

    initialize: function(options) {
        this.entry_id = null;
        this.entry = undefined;

        if (options.entry_id) {
            this.entry_id = options.entry_id;
            this.entry = new EntryModel({id: options.entry_id});
        }
    },
    render: function() {
        // Просто рендерим шаблон удаления записи
    },
    deleteEntry: function() {
        this.entry.destroy({
            wait: true,
            success: function() {
                console.log("SUCCESSFUL!");
                router.navigate("entries", {trigger: true});
            },
            error: function() {
                console.log("ERROR!");
            }
        });
        return false;
    },
    cancel: function() {
        router.navigate("entries", {trigger: true});
        return false;
    }
});

URL'ы ресурса и модели один в один совпадают. Объект this.entry имеется (со всеми свойствами, что нужно). Но при выполнении метода destroy() сервер возвращает ошибку - 404 NOT FOUND! На что тестипай ругается?

 , , ,

djnoob
()

RSS подписка на новые темы