Хотите создать представление, которое может выводить базу данных MySQL в виде файла SQL - PullRequest
2 голосов
/ 02 августа 2011

Кажется, у меня проблема.Я хочу написать некоторый код, который может создавать дамп базы данных MySQL, когда пользователь администратора нажимает кнопку.Я попытался написать код в моем views.py ниже.

Views.py

    @login_required
    def dbbackup(request):
        if not (request.user.is_authenticated() and request.user.is_staff):
            raise http.Http404
        os.chdir('/usr/local/src/djcode/c2duo_mms')  # This is important as apache by default goes to the user's home directory.
        os.popen3("mysqldump --add-drop-table -u " + settings.DATABASE_USER + " -p" + settings.DATABASE_PASSWORD + " " + settings.DATABASE_NAME + " >  backup.sql")
        os.popen3("gzip -c backup.sql > backup.gz")

Теперь выдает ошибку The view c2duo_mms.mmc.views.dbbackup didn't return an HttpResponse object. Если я добавлю returnHttpResponse в конце.он скажет unbound method has_header() must be called with HttpResponse instance as first argument (got str instance instead).

Я не очень уверен, в чем проблема.но я не могу найти решение.Я вроде застрял сейчас.

1 Ответ

1 голос
/ 02 августа 2011

Вам необходимо вернуть действительный HttpResponse объект из конца вашего метода. Например, если вы хотите вернуть файл gzip:

@login_required
def dbbackup(request):
    if not (request.user.is_authenticated() and request.user.is_staff):
        raise http.Http404
    os.chdir('/usr/local/src/djcode/c2duo_mms')  # This is important as apache by default goes to the user's home directory.
    os.popen3("mysqldump --add-drop-table -u " + settings.DATABASE_USER + " -p" + settings.DATABASE_PASSWORD + " " + settings.DATABASE_NAME + " >  backup.sql")
    os.popen3("gzip -c backup.sql > backup.gz")
    dataf = open('/usr/local/src/djcode/c2duo_mms/backup.gz', 'r')
    return HttpResponse(dataf.read(), mimetype='application/x-gzip')

Это должно инициировать загрузку файла gzip.

...