目录
pycharm连接mysql数据库
2. 在配置页面配置数据库连接信息,注意第一次连接需要下载驱动,最后点test connection测试连接通过即可
# 在settings.py中,添加数据库的连接配置(可以配置多个数据库)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
# 修改为(最简单的配置)
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 将最后一位改为要连接的数据库类型
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'NAME': 'db1', # 数据库名称
'HOST': '192.168.0.2', # 数据库地址
'PORT': 3306, # 数据库连接端口
'USER': 'root', # 连接数据库用户名
'PASSWORD': '123', # 连接数据库密码
'CHARSET': 'utf8', # 使用的字符集
}
}
django连接数据库报错
# django 1.x版本处理:
# 需要在项目或app的__init__.py文件中添加如下配置
import pymysql
pymysql.install_as_MySQLdb()
# django 2.x及以下,可以通过下载mysqlclient模块解决
pip3.8 install mysqlclient
ORM简介
ORM高度封装了SQL语句,在django中使用ORM操作数据库,但有时候会效率较低,需要自己写SQL。
在models.py模型层创建模型
class user(models.Model):
# 创建一个表的主键字段,注意,如果不指定主键字段,ORM会自动帮你创建一个主键字段
id = models.AutoField(primary_key=True)
# 创建一个字符字段,最大大小指定为32长度,verbose_name可以增加字段注释
name = models.CharField(max_length=32, verbose_name='姓名')
age = models.IntegerField(verbose_name='年龄')
执行数据库迁移命令
只有执行了数据库迁移命令,django才会在数据库中创建表,并且可以使用ORM操作。
python manage.py makemigrations # 将操作记录到系统中
python manage.py migrate # 将操作同步到数据库中
注:在执行完数据库迁移命令后,django也会在数据库中自动创建一些系统表。
我们继续使用昨天用户注册页面,代码如下:
<div class="container">
<div class="row">
<h1 class="text-center">用户登录</h1>
<div class="col-md-6 col-md-offset-3">
<form action="" method="post">
{% csrf_token %}
<p>username:
<input type="text" class="form-control" name="name">
</p>
<p>password:
<input type="text" class="form-control" name="age">
</p>
<input type="submit" class="btn btn-block btn-success">
</form>
</div>
</div>
</div>
下面我们使用这个页面进行数据库相关操作
models.user.objects.create(name=name, age=age)
# 先将需要删除的数据进行筛选出来后,再删除
res = models.user.objects.filter(id=1).delete()
# 返回值为:(1, {'app01.user': 1})
print(res)
# 修改数据需要先将要修改的数据查询出来后,再进行修改.
# 类似于SQL:update user set name = 'Rose' where name='xxx';
res = models.user.objects.filter(name=name).update(name='Rose')
# update的返回值为修改的最后一个值的主键
print(res)
# 使用一个变量接收返回值,返回的结果为一个QuerySet,数据套字典的格式。
res = models.user.objects.filter(name=name) # <QuerySet [<user: user object (1)>, <user: user object (2)>]>
# 如果想要查看QuerySet中的值时,可以使用以下方式操作
print(res[0].name)
print(res[0].age)
练习:简单实现注册登录功能
模型层models
class register(models.Model):
username = models.CharField(max_length=32, verbose_name='用户名')
password = models.CharField(max_length=800, verbose_name='用户密码')
路由层urls
path('register/', views.register_func),
# 登录页面
path('login/', views.login_func),
视图层
def register_func(request):
if request.method == 'POST':
# 接收前台传入的数据
name = request.POST.get('name')
pwd = request.POST.get('pwd')
confirm_pwd = request.POST.get('confirm_pwd')
if name and pwd and confirm_pwd:
db_username = models.register.objects.filter(username=name)
if db_username:
return HttpResponse('用户名已存在')
elif pwd == confirm_pwd and name:
md5 = hashlib.md5()
md5.update('ChinaPost'.encode('utf8'))
md5.update(pwd.encode('utf8'))
md5_pwd = md5.hexdigest()
models.register.objects.create(username=name, password=md5_pwd)
return HttpResponse('注册成功')
else:
return HttpResponse('两次密码不一致')
else:
return HttpResponse('用户名或密码不能为空')
return render(request, 'login.html')
# 简单的登录功能
def login_func(request):
# 验证是否是post请求
if request.method == 'POST':
# 接收前端用户名密码
name = request.POST.get('name')
pwd = request.POST.get('pwd')
# 判断用户名或密码是否为空
if name and pwd:
# 从数据库中取数进行比对
db_name = models.register.objects.filter(username = name)
# 对密码进行加密
md5 = hashlib.md5()
md5.update('ChinaPost'.encode('utf8'))
md5.update(pwd.encode('utf8'))
md5_pwd = md5.hexdigest()
# 判断用户名与密码是否一致
if db_name:
if db_name[0].password == md5_pwd:
return HttpResponse('登录成功')
else:
return HttpResponse('用户名或密码错误')
else:
return HttpResponse('用户名或密码错误')
else:
# 如果用户名或密码为空,则返回错误
return HttpResponse('错误!用户名或密码不可以为空')
return render(request, 'login.html')
前端-注册页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.css' %}">
<script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.js' %}"></script>
<script src="{% static 'jQuery.js' %}"></script>
</head>
<body>
<div class="container">
<div class="row">
<h1 class="text-center">用户登录</h1>
<div class="col-md-6 col-md-offset-3">
<form action="" method="post">
{% csrf_token %}
<p>username:
<input type="text" class="form-control" name="name">
</p>
<p>password:
<input type="password" class="form-control" name="pwd">
</p>
<p>confirm_password
<input type="password" class="form-control" name="confirm_pwd">
</p>
<input type="submit" class="btn btn-block btn-success">
</form>
</div>
</div>
</div>
</body>>
</html>
前端登录页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Login</title>
{% load static %}
<link rel="stylesheet" href="{% static 'bootstrap-3.4.1-dist/css/bootstrap.css' %}">
<script src="{% static 'bootstrap-3.4.1-dist/js/bootstrap.js' %}"></script>
<script src="{% static 'font-awesome-4.7.0/css/font-awesome.css' %}"></script>
<script src="{% static 'jQuery.js' %}"></script>
</head>
<body>
<div class="container">
<h1 class="text-center">用户登录</h1>
<div class="row">
<div class="col-md-6 col-md-offset-3">
<form action="" method="post">
{% csrf_token %}
<p>用户名
<input type="text" class="form-control" name="name">
</p>
<p>密码
<input type="password" class="form-control" name="pwd">
</p>
<input type="submit" class="btn btn-success btn-block">
</form>
</div>
</div>
</div>
</body>
</html>
手机扫一扫
移动阅读更方便
你可能感兴趣的文章