首页 > 解决方案 > 如何通过 Python3 Django 将通过注册页面创建的用户存储到 Google Cloud MySQL 数据库?

问题描述

谁能给我一个链接或指导,说明如何使用 django 的身份验证库将通过注册页面创建的用户存储到 Google Cloud SQL?我无法存储和检索数据以便该人登录网站。

`从 django.shortcuts 导入渲染

# 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`

标签: djangopython-3.xauthenticationgoogle-cloud-platformgoogle-cloud-sql

解决方案


要将 Cloud SQL 数据库连接到 Django 的应用程序,需要与 Django 兼容的 Python 3 数据库连接器库。

我们需要安装数据库连接器mysqlclient,它是 MySQLdb 的一个分支版本。

根据 mysqlclient 文档,“MySQLdb 是流行的 MySQL 数据库服务器的线程兼容接口,它提供 Python 数据库 API。” 主要区别在于 mysqlclient 具有包含 Python 3 支持的额外好处。

按照步骤:

1) 您需要安装以下库,将它们添加到您的 requirements.txt 文件中: python3-dev libmysqlclient-dev mysqlclient mysql-server

有了这个,我们将使用 PyPi mysqlclient 连接器库安装 MySQL 服务器和 MySQL 客户端。

2) 将 MySQL 数据库连接添加到您的应用程序

  • 设置.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 凭据。

我的.cnf

...
[client]
database = db_name
user = db_user
password = db_password
default-character-set = utf8

3) 注册功能:

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

推荐阅读