Чтобы подключить базу данных Cloud SQL к приложению Django, необходима библиотека коннектора базы данных Python 3, совместимая с Django.
Нам потребуется установить соединитель базы данных, mysqlclient , который является разветвленной версией MySQLdb.
Согласно документации mysqlclient, « MySQLdb - это потоково-совместимый интерфейс с популярным сервером баз данных MySQL, который обеспечивает API базы данных Python ». Основное отличие заключается в том, что mysqlclient имеет дополнительное преимущество, включающее поддержку Python 3.
Выполните следующие действия:
1) Вам потребуется установить следующие библиотеки, добавьте их в свои требования .txt файл: python3 -dev libmysqlclient-dev mysqlclient mysql -server
При этом мы установим сервер MySQL и клиент MySQL с использованием библиотеки соединителей PyPi mysqlclient.
2) Добавьте MySQL соединение с базой данных к вашему приложению
..
# Database
# https://docs.djangoproject.com/en/2.0/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': '/etc/mysql/my.cnf',
},
}
}
...
- Отредактируйте файл config.py, добавив свои MySQL учетные данные.
my.cnf
...
[client]
database = db_name
user = db_user
password = db_password
default-character-set = utf8
3) Функция Sigup:
def signup(request):
registered = False
if request.method == 'POST':
form = UserCreationForm(data=request.POST)
if user_form.is_valid():
user = form.save()
user.set_password(user.password)
user.save()
registered = True
login(request, user)
template = loader.get_template("login.html")
return HttpResponse(template.render())
else:
for msg in form.error_messages:
print(form.error_messages[msg])
return render(request=request,
template_name="signup.html",
context={"form": form})
else:
user_form = UserCreationForm()
return render(request=request,
template_name="signup.html",
context={"form": form})
4) Функция входа в систему:
def login_view(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
user = authenticate(username=username, password=password)
if user:
if user.is_active:
login(request,user)
template = loader.get_template("index.html")
return HttpResponse(template.render())
else:
return HttpResponse("Your account was inactive.")
else:
print("Someone tried to login and failed.")
print("They used username: {} and password: {}".format(username,password))
return HttpResponse("Invalid login details given")
else:
return HttpResponseRedirect() #add error page link