Я новичок в Django, и сейчас я разрабатываю приложение Django для резервного копирования и восстановления баз данных MySQL.Рабочий процесс этого приложения состоит из 4 шагов:
- получение параметров целевой базы данных из html-страницы;
- получение параметров исходной базы данных или загрузка файла sql из html-страницы;
- выберите таблицы данных;
- проверьте и подтвердите данные для загрузки.
Я использовал несколько кнопок для отправки параметров на html-странице, и каждая из них ссылается наifelse в почтовой функции.Коды ниже.Кажется, что после того, как я возвратил рендер, параметры, соединение с базой данных и курсор не могут быть «общими» во всей функции.Как я могу справиться с этим?
Python3.6 django2.1
# views.py
#-*-coding:utf-8 -*-
import os
import os.path
import sys
import datetime
from builtins import int
from django.db import models
from django.shortcuts import render
from django.views import View
from django.http import HttpResponse
import pymysql
# Create your views here.
class IndexView(View):
template_name = 'add_struc/index.html'
def get(self, request):
return render(request, 'add_struc/index.html',)
def post(self, request):
if request.method == 'POST' and 'Tgt_link' in request.POST:
# pressed confirm in step 1. 在步骤1按下了设置目标数据库的链接
Tgt_link = {}
Tgt_ip = request.POST.get('Tgt_ip')
Tgt_port = int(request.POST.get('Tgt_port'))
Tgt_db = request.POST.get('Tgt_db')
Tgt_name = request.POST.get('Tgt_name')
Tgt_passwd = request.POST.get('Tgt_passwd')
Tgt_char = request.POST.get('Tgt_char')
# # connect to target db and get the cursor. 连接目标数据库,获取游标。
# self.Tgt_database = pymysql.connect(
# host=Tgt_ip,
# port=Tgt_port,
# db=Tgt_db,
# user=Tgt_name,
# passwd=Tgt_passwd,
# charset='utf8'
# )
# self.Tgt_cursor = database.cursor()
Tgt_link = {'Tgt_ip':Tgt_ip, 'Tgt_port':Tgt_port,'Tgt_db':Tgt_db,'Tgt_name':Tgt_name,'Tgt_passwd':'******', 'Tgt_char':Tgt_char,}
self.Tgt = Tgt_link
context = Tgt_link
# yield self.Tgt
return render(request, 'add_struc/index.html', context=context)
elif request.method == 'POST' and 'Ori_link' in request.POST:
# pressed confirm in step 2.在步骤2按下了设置源数据库的链接
Ori_link = {}
# 数据源链接
Ori_ip = request.POST.get('Ori_ip')
Ori_port = int(request.POST.get('Ori_port'))
Ori_db = request.POST.get('Ori_db')
Ori_name = request.POST.get('Ori_name')
Ori_passwd = request.POST.get('Ori_passwd')
Ori_char = request.POST.get('Ori_char')
# connect to origin db (data source) and get the cursor. 连接源数据库,获取游标。
self.Ori_database = pymysql.connect(
host=Ori_ip,
port=Ori_port,
db=Ori_db,
user=Ori_name,
passwd=Ori_passwd,
charset='utf8'
)
self.Ori_cursor = self.Ori_database.cursor()
# back up origin db to csv or sql file 备份数据库为sql文件或csv
self.Ori_cursor.close()
self.Ori_database.close()
Ori_link = {'Ori_ip':Ori_ip, 'Ori_port':Ori_port, 'Ori_db':Ori_db, 'Ori_name':Ori_name, 'Ori_passwd':'******', 'Ori_char':Ori_char,}
# context = self.Tgt.update(Ori_link)
context = Ori_link
return render(request, 'add_struc/index.html', context=context)
elif request.method == 'POST' and 'upload_file' in request.POST:
# uploaded a sql file or csv file in step 2. 在步骤2上传了数据包文件
return render(request, 'add_struc/index.html')
elif request.method == 'POST' and 'sheet_selected' in request.POST:
# confirmed the data sheets in step3. 在步骤3选好了数据表
return render(request, 'add_struc/index.html')
elif request.method == 'POST' and 'start_import' in request.POST:
# confirm alter and close db connections.在步骤4开始执行导入
return render(request, 'add_struc/index.html')