Django初识前后端交互(含MySQL)
目录
- Django初识前后端交互(含MySQL)
- request方法
- 示例
- 连接数据库
- Django ORM
- 在models.py中建表
- 允许为空
- 指定默认值
- 数据库迁移命令
- 数据的增删改查
- 数据的增加
- 数据的查询
- 查询所有数据
- 查询单个数据(对象)
- 查询单个数据的所有信息
- 查询某条数据的某个信息,键值对
- 判断某个数据是否存在
- 查询第一条数据
- 查询最后一条数据
- 查询多条个字段的所有数据(键值对)
- 数据的删除
- 数据的更改
首先把settings文件中的中间件注释掉,否则在post请求时会报错
MIDDLEWARE = ['django.middleware.security.SecurityMiddleware','django.contrib.sessions.middleware.SessionMiddleware','django.middleware.common.CommonMiddleware',# 'django.middleware.csrf.CsrfViewMiddleware','django.contrib.auth.middleware.AuthenticationMiddleware','django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]
request方法
request方法用于views.py中对web页面执行各种操作
request.method
:获取请求方式(GET/POST)request.POST
:获取form表单中用户输入内容,不包含文件request.get
:与POST请求相同,但是列表元素只能获取最后一位request.getlist
:获取列表所有元素
示例
先来一个简单的登录模态框
原码如下
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title><!-- 引入jQuery--><script src="{% static 'js/jquery.js' %}"></script><!-- 引入Bootstrap的CSS文件--><link href="{% static 'css/bootstrap.min.css' %}" rel="stylesheet"><!-- 引入Bootstrap的JavaScript文件--><script src="{% static 'js/bootstrap.js' %}"></script><style>.row {background-color: white;height: 50px;}.col-md-1 {text-align: center;font-size: 34px;}#logo1 {font-family: "幼圆", Arial, sans-serif;color: black;}body {background-color: dimgrey;}.btn-default {border: none;font-size: 20px;}.login-one {font-size: 21px;}</style>
</head>
<body>
<div class="row"><div class="col-md-1 logo"><a href="" target="_parent" id="logo1">博客园</a></div><div class="col-md-1 login"><!-- 登录按钮 --><button type="button" class="btn btn-default btn-lg" data-toggle="modal" data-target="#myModal" id="login1">登录</button><!-- 登录模态框 --><div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"><div class="modal-dialog" role="document"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><spanaria-hidden="true">×</span></button></div><div class="modal-body"><form action="" method="get"><div class="form-group"><label for="username" class="login-one">用户名</label><br><input type="text" class="form-control" id="username" placeholder="Username"name="username"><br></div><div class="form-group"><label for="pwd" class="login-one">密码</label><br><input type="password" class="form-control" id="pwd" placeholder="Password"name="password"><br></div><div class="modal-footer"><button type="button" class="btn btn-default" data-dismiss="modal">返回</button><button type="submit" class="btn btn-primary" id="login2">登录</button></div></form></div></div></div><div class="modal-dialog" role="document"></div></div></div><div class="col-md-1 register"><button onclick="location.href=/register" class="btn btn-default" id="r1">注册</button></div><div class="col-md-1 col-md-offset-8"><div class="dropdown"><button class="btn btn-default dropdown-toggle" type="button" id="setting" data-toggle="0"aria-haspopup="true" aria-expanded="true">游客<span class="caret"></span></button><ul class="dropdown-menu" aria-labelledby="setting"><li><a href="#" class="menu">个人信息</a></li><li><a href="#" class="menu">文章管理</a></li></ul></div></div>
</div>
</body>
</html>
后端:
def home(request):response = render(request, 'blog.html')data = request.GETprint(data)username = data.get("username")password = data.get("password")print(username, password)return response
输入表单然后提交
成功拿到数据
连接数据库
这是Django默认的数据库
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}
修改为我们需要的配置
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'mydj','USER': 'root','PASSWORD': '7997','HOST': '127.0.0.1','PORT': 3306,'CHARSET': 'utf8',}
}
django 默认使用mysqldb模块链接mysql
但是该模块的兼容性不好,需要手动修改为pymysql链接
在项目下的init或者任意的应用名下的init文件中书写一下代码
init.py
import pymysqlpymysql.install_as_MySQLdb()
Django ORM
在models.py中建表
id字段Django会自动帮忙创建
from django.db import models# Create your models here.
class User(models.Model):username = models.CharField(max_length=32)password = models.CharField(max_length=32)
允许为空
class MyModel(models.Model):name = models.CharField(max_length=50, null=True) # 允许name字段为空
指定默认值
class MyModel(models.Model):age = models.IntegerField(default=18) # 默认年龄为18岁
数据库迁移命令
-
创建操作记录
-
python manage.py makemigrations
操作完后Django会自动在migrations目录下生成sql语句文件
-
-
同步到数据库
-
python manage.py migrate
-
等待表创建完毕
这样就是成功执行建表语句了
删除字段只要在models中删除对应的字段行,然后重新makemigrations即可生成新的sql语句
数据的增删改查
数据的增加
直接进入views.py将获取的数据上传到sql类对象
def home(request):sql = user.objects.create(username=username,password=pwd)sql.save()return response
上传成功~
数据的查询
查询所有数据
from app01.models import userdef home(request):# 查询全部数据all_data = user.objects.all().values()return response
查询单个数据(对象)
username = user.objects.filter(username='admin')
# 结果:<QuerySet [<user: user object (1)>, <user: user object (2)>, <user: user object (3)>, <user: user object (4)>, <user: user object (5)>]>
查询单个数据的所有信息
# date:list属性
username = user.objects.filter(username='admin').values()[0]
# 结果:{'id': 1, 'username': 'admin', 'password': '123', 'up_time': datetime.datetime(2024, 2, 28, 9, 29, 46, 516523, tzinfo=<UTC>)}
查询某条数据的某个信息,键值对
data = user.objects.filter(username='admin').values('username')[0]
# 结果:{'username': 'admin'}
判断某个数据是否存在
login_state = user.objects.filter(username=username, password=password).exists()
# 不存在返回False
查询第一条数据
user.objects.first()
查询最后一条数据
qry = user.objects.all()[-1]
查询多条个字段的所有数据(键值对)
user_pwd = user.objects.all().only('username','password').values_list('username','password')
# 结果:<QuerySet [('admin', '123'),('999', '999')]>
数据的删除
from app01.models import user
def home(request):user.objects.filter('username'='张三').delete()
数据的更改
user.objects.filter('username'='张三').update('username'='李四')