django - 如何通过 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`
解决方案
要将 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
推荐阅读
- forms - 如何从 react-native web 表单更新状态?
- sql - 如何使用“in”运算符返回 0 而不是 null
- mongodb - Mongo URI 问题 - SSL 对等证书验证失败:自签名证书
- typescript - 在 Typscript 可区分联合中省略整个类型
- python - IP 捕获或主机名的正则表达式
- python - 如何计算python函数的执行时间?
- c++ - 使用 cmake 进行墨西哥
- javascript - querySelector 似乎正在从输入 id="submit" 和另一个输入 type="submit" 中识别“#submit”
- python - 如何使用 Python 停止/删除 GCP Compute 实例
- python - 所选值的总最大值