Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Веб-разработка и фреймворки > Веб-интерфейс для Базы Данных


Автор: OlgA88 30.4.2010, 21:18
Вот такой вопрос! Есть справочник телефонных абонентов. Для него делаю веб-интерфейс! В питоне не очень разбираюсь но по примеру получился интерфейс для csv-файла. 
Но необходимо подключиться к базе данных mysql, и оттуда брать данные.
Как это делается в питон-файлах?
Подскажите, где необходимо это подключение прописать!?)
По аналогии разобраться могу, а просто из головы взять сложно!)

Код

"""
Web интерфейс 
"""

import os
from Cheetah.Template import Template
import cherrypy

class Root:
  @staticmethod
  def prepare(telephoneDir):
    Root.collaborators = list(sorted(telephoneDir.subdivision))
    Root.subdivisions = list(sorted(telephoneDir.subdivision.iterSubdivision()))
    Root.subdivisions.insert(0, 'все')
    Root.telephoneTypes = list(sorted(telephoneDir.telephones.telephoneTypes))
    Root.telephoneTypes.insert(0, 'все')
    Root.telephoneDir = list(sorted(telephoneDir))

  @cherrypy.expose
  def index(self, page='0', subdivision='0', collaborator='', number='', telephoneType='0'):
    page = int(page)
    subdivision = int(subdivision)
    telephoneType = int(telephoneType)

    if not subdivision:
      lambdaSubdivision = lambda rec: True
    else:
      s = Root.subdivisions[subdivision]
      lambdaSubdivision = lambda rec: rec.collaborator in s

    if not collaborator:
      lambdaCollaborator = lambda rec: True
    else:
      l = len(collaborator)
      lambdaCollaborator = lambda rec: str(rec.collaborator)[0:l] == collaborator

    if not number:
      lambdaNumber = lambda rec: True
    else:
      l = len(number)
      lambdaNumber = lambda rec: str(rec.telephone.number)[0:l] == number

    if not telephoneType:
      lambdaTelephoneType = lambda rec: True
    else:
      t = Root.telephoneTypes[telephoneType]
      lambdaTelephoneType = lambda rec: rec.telephone.type == t

    root = Template(file=os.path.join(os.curdir, 'index.tmpl'))
    root.page = page
    root.subdivision = subdivision
    root.subdivisions = Root.subdivisions
    root.collaborator = collaborator
    root.number = number
    root.telephoneType = telephoneType
    root.telephoneTypes = Root.telephoneTypes
    root.telephoneDir = filter(lambda telephone: lambdaSubdivision(telephone) and \
                                                 lambdaCollaborator(telephone) and \
                                                 lambdaNumber(telephone) and \
                                                 lambdaTelephoneType(telephone), Root.telephoneDir)
    return str(root)

root = Root()

cherrypy.config.update({
  'log.screen': True,
  'environment': 'production',
  'server.socket_port': 8080,
  'server.threadPool':10,
  'tools.staticfile.on': False,
  'tools.sessions.on': True,
  'tools.sessions.timeout': 60,
})

conf = {
  '/style.css': {
    'tools.staticfile.on': True,
    'tools.staticfile.filename': os.path.join(os.getcwd(), 'style.css'),
  },
}

def run(telephoneDir):
  Root.prepare(telephoneDir)
  cherrypy.tree.mount(root, config=conf)
  cherrypy.server.quickstart()
  cherrypy.engine.start()

if __name__ == '__main__':
  import tdcsv
  telephoneDir = tdcsv.load()
  run(telephoneDir)

Автор: 31416 1.5.2010, 22:09
Гуглить не пробовали?
http://hacker-pro.net/showthread.php?t=7403

Цитата(OlgA88 @  30.4.2010,  21:18 Найти цитируемый пост)
Подскажите, где необходимо это подключение прописать!?)

Прописывайте в модуле. Подробнее - http://evgenm.com/blog/2010/04/28/singletony-v-pitone/

Автор: OlgA88 1.5.2010, 22:39
Спасибо!))
там хорошо написано!) Но про гуглить - как ни странно, но толкового не очень много!)
Вот еще вопрос!) А можно в данном случае прописать доступ к БД в другом файле, 
например mydb.py, 
а в данном файле сервера только написать вызов этого файла
import mydb.py ??
или это совсем не правильно и нужно опять к библиотеке MySQLdb обращаться?))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)