2013-05-16 3 views
0

У меня есть приложение Django, которое использует sqlite как базу данных. У меня не будет просмотра, который сможет загрузить этот файл sqlite.Загрузить файл sqlite из django

Это то, что у меня до сих пор:

def backup(request): 
    """Return Sqlite3 db file, if Sqlite3 db is used.""" 
    import settings 

    db_engine = settings.DATABASES['default']['ENGINE'] 
    #db_engine = 'JUST_FOR_TESTING' 

    if db_engine == 'django.db.backends.sqlite3': 
     db_path = settings.DATABASES['default']['NAME'] 

     response = HttpResponse(mimetype='application/x-sqlite3') 
     response['Content-Disposition'] = 'attachment; filename=%s' % db_path 
     response.write(db_path) 

     return HttpResponse(response) 
    else: 
     return HttpResponse("settings.DATABASES['default']['ENGINE'] is %s,<br />\ 
          only for 'django.db.backends.sqlite3' online backup is posible." % (db_engine)) 

Что мне не хватает, как добавить этот файл в качестве вложения.

Также есть способ как-то загружать только определенные таблицы?

ответ

5

Вы просто пытаетесь отправить путь к файлу в качестве вложения.

Соответствующий код

from django.core.files import File 
    dbfile = File(open(db_path, "rb")) 
    response = HttpResponse(dbfile, mimetype='application/x-sqlite3') 
    response['Content-Disposition'] = 'attachment; filename=%s' % db_path 
    response['Content-Length'] = dbfile.size 

    return response 
+0

Это работает отлично. У меня осталось еще 2 вопроса. 1: существует ли способ установить имя файла по умолчанию в диалоговом окне сохранения веб-браузера? 2: Есть ли способ установить для веб-страницы строку как «Резервное копирование», потому что в настоящее время содержимое веб-страницы - это то, что осталось от последней страницы. – WebOrCode

+0

1. 'filename' в заголовке' Content-Disposition' будет предоставлять имя по умолчанию. 2. Я думаю, вам нужно использовать ajax для этого. Загрузите с помощью ajax-вызова и обновите страницу, когда это будет сделано. Однако я этого не сделал. – Rohan

+0

1. Вы правы, но проблема была в разделителях '\' и '//', поэтому я заменил db_path на db_path.split (os.sep) [- 1] 2. есть ли способ перенаправления на другое представление после , вот этот ? Потому что я мог бы использовать это, как взломать :-) – WebOrCode

Смежные вопросы