Как сохранить пользователя, созданного на странице регистрации, в базе данных Google Cloud MySQL через Python3 Django? - PullRequest
0 голосов
/ 26 февраля 2020

Может ли кто-нибудь предоставить мне ссылку или руководство о том, как перейти к сохранению пользователей, созданных через страницу регистрации, с использованием аутентификационных библиотек django в Google Cloud SQL? Я не могу сохранить данные, а также получить их, чтобы человек мог войти на сайт.

`из django .shortcuts import render

# Create your views here.
from django.http import HttpResponse, HttpResponseRedirect
from django.template import Context, loader
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import login, logout, authenticate
from django.shortcuts import render, redirect
from django.contrib import auth


def home(request):
    template = loader.get_template("home.html")
    return HttpResponse(template.render())


def signup(request):
    if request.method == "POST":
        form = UserCreationForm(request.POST)

        if form.is_valid():
            user = form.save()
            username = form.cleaned_data.get('username')
            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})

       form = UserCreationForm
       return render(request=request,
                  template_name="signup.html",
                  context={"form": form})


def login(request):
    template = loader.get_template("login.html")
    return HttpResponse(template.render())


def login_view(request):
    username = request.POST['uname']
    password = request.POST['psw']
    user = auth.authenticate(username=username, password=password)
    if user is not None and user.is_active:
        #correct password, and the user is marked "active"
        auth.login(request, user)
        #redirect to the success page
        template = loader.get_template("index.html")
        return HttpResponse(template.render())
    else:
        #show an error page
        return HttpResponseRedirect() #add error page link


def logout_view(request):
    auth.logout(request)
    #redirect to a success page
    return HttpResponseRedirect() #add page link`

1 Ответ

2 голосов
/ 26 февраля 2020

Чтобы подключить базу данных 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 соединение с базой данных к вашему приложению

  • settings.py
..
# 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
...