Добавляем номер книги в бд (Инструкция)

6 years 3 months ago - 6 years 3 months ago #2028 by arthas
arthas created the topic: Добавляем номер книги в бд (Инструкция)
Недавно столкнулся с необходимостью добавления в базу данных номера книги в серии. Ответа на форуме не получил, в итоге разобрался сам и решил другим помочь. Сразу говорю, из ЯП я изучал только obj-c и swift, по-этому все чем я пользовался - это логическое мышление + google. Если кто шарит больше и может что-то добавить - пишите в теме.
Все операции желательно делать перед загрузкой файлов на сервер.
1. Открываем файл ˜/opds_catalog/models.py
Добавляем строчку
SIZE_BOOK_SERIALNUM = 10000
Сюда:
Warning: Spoiler! [ Click to expand ]

Строчку
serialnum = models.CharField(max_length=SIZE_BOOK_SERIALNUM)
сюда:
Warning: Spoiler! [ Click to expand ]

2. Файл ˜/opds_catalog/migrations/0001_initial.py
Строчка
('serialnum', models.CharField(max_length=10000)),
Warning: Spoiler! [ Click to expand ]

3. Файл ˜/book_tools/format/fb2sax.py
Строка
self.serialnum=fb2tag(('description','title-info'))
Warning: Spoiler! [ Click to expand ]

Тут поподробнее. В скобках "(('description','title-info'))" находится путь к данным в книге, которые нам нужны. Для примера откроем исходный код любой книги fb2.
Путь может быть любым, в зависимости от редактора, в котором создавалась книга, и в зависимости от нужных вам данных.
Warning: Spoiler! [ Click to expand ]

Строка
self.serialnum.reset()
Warning: Spoiler! [ Click to expand ]

Строка
self.serialnum.tagopen(name)
Warning: Spoiler! [ Click to expand ]

Строка
self.serialnum.tagclose(name)
Warning: Spoiler! [ Click to expand ]

Строка
self.serialnum.setvalue(data)
Warning: Spoiler! [ Click to expand ]

Много строк
def __detect_serialnum1(self):
        res = 'Нету'
        if len(self.fb2parser.series.attrss)>0:
            s = self.fb2parser.series.attrss[0]
            res = s.get('number')
        if len(res) > 0:
            return res
        return None
Если у вас другие данные, смотрите как сделана аннотация и делайте по аналогии.
Warning: Spoiler! [ Click to expand ]

И, забыл об этой, строка
self.serialnum1 = self.__detect_serialnum1()
Warning: Spoiler! [ Click to expand ]

4. Файл ˜/opds_catalog/feeds.py
Строка
'serialnum': strip_tags(row.serialnum),
Warning: Spoiler! [ Click to expand ]

Строка
<b>Series number: </b>%(serialnum)s<br/>
Warning: Spoiler! [ Click to expand ]

Строка
'serialnum':item['serialnum']
Warning: Spoiler! [ Click to expand ]

Строка
'serialnum': strip_tags(row.serialnum),
Warning: Spoiler! [ Click to expand ]

Строка
<b>Series number: </b>%(serialnum)s<br/>
Warning: Spoiler! [ Click to expand ]

Строка
'serialnum':item['serialnum']
Warning: Spoiler! [ Click to expand ]

5. Файл ˜/opds_catalog/opdsdb.py
Строка
SIZE_BOOK_SERIALNUM
Warning: Spoiler! [ Click to expand ]

Строка
serialnum
Warning: Spoiler! [ Click to expand ]

Строка
serialnum=p(serialnum,SIZE_BOOK_SERIALNUM)
Warning: Spoiler! [ Click to expand ]

6. Файл ˜/opds_catalog/sopdscan.py
Строка
serialnum=' '
Warning: Spoiler! [ Click to expand ]

Строка
serialnum
Warning: Spoiler! [ Click to expand ]

Строка
serialnum = book_data.serialnum1 if book_data.serialnum1 else ''
serialnum = serialnum.strip(strip_symbols) if isinstance(serialnum, str) else serialnum.decode('utf8').strip(strip_symbols)
Warning: Spoiler! [ Click to expand ]

Строка
serialnum
Warning: Spoiler! [ Click to expand ]

7. Файл ˜/sopds_web_backend/views.py
Строка
'serialnum': strip_tags(row.serialnum),
Warning: Spoiler! [ Click to expand ]

Строка
'serialnum': strip_tags(row.serialnum),
Warning: Spoiler! [ Click to expand ]

8. Файл ˜/sopds_web_backend/sopds_books.html
Строка
<b>{% trans "Номер в серии:" %}</b> {{ b.serialnum }} <br>
Warning: Spoiler! [ Click to expand ]

9. Файл ˜/book_tools/fb2.py
Строка
serialnum1 = self.__detect_serialnum1(tree)
            if serialnum1:
                self.serialnum1 = serialnum1.strip()
Warning: Spoiler! [ Click to expand ]

Строка
def __detect_serialnum1(self, tree):
        res = tree.xpath('/fb:FictionBook/fb:description/fb:title-info/fb:sequence', namespaces=self.__namespaces)
        if len(res) == 0:
            res = tree.xpath('/FictionBook/description/title-info/sequence')
        if len(res) > 0:
            return etree.tostring(res[0], encoding='utf-8', method='text')
    
        return None
Warning: Spoiler! [ Click to expand ]


Вроде это все. Если есть вопросы - пишите в телегу @anikin_dima
Last Edit: 6 years 3 months ago by arthas.

Please Войти or Create an account to join the conversation.

  • arthas
  • arthas's Avatar Topic Author
  • Offline
  • Новый участник
  • Новый участник
More
6 years 3 months ago - 6 years 3 months ago #2031 by mitshel
mitshel replied the topic: Добавляем номер книги в бд (Инструкция)
Спасибо за интерес к программе. Все было намного проще, на самом деле информация о серии уже была в БД.
Простите, что заставил долго ждать, однако сложности со свободным временем.
Вывод номера серии добавил в devel ветку проекта.

Порпробуйте установить и потестировать версию 0.44-dev с github:
git clone github.com/mitshel/sopds.git -b v0.44-devel
Last Edit: 6 years 3 months ago by mitshel.

Please Войти or Create an account to join the conversation.

  • mitshel
  • mitshel's Avatar
  • Offline
  • Администратор
  • Администратор
More
6 years 3 months ago #2033 by arthas
arthas replied the topic: Добавляем номер книги в бд (Инструкция)
Думаю по моей инструкции (хоть она далеко от идеальной) можно добавить какую-угодно информацию из книг, что немного упростит жизнь пользователей)

Please Войти or Create an account to join the conversation.

  • arthas
  • arthas's Avatar Topic Author
  • Offline
  • Новый участник
  • Новый участник
More
Time to create page: 0.263 seconds