9.5Django操作数据库的增删改查
2018-9-5 18:10:52
先贴上笔记
day61 2018-04-28 1. 内容回顾 1. HTTP协议消息的格式:
1. 请求(request)
请求方法 路径 HTTP/1.1\r\n
k1:v1\r\n
...\r\n
\r\n
请求体 <-- 可以有,可以没有 2. 响应(response)
HTTP/1.1 状态码 状态描述符\r\n
k1:v1\r\n
Content-Type: text/html; charset=utf8\r\n
\r\n
响应正文 <-- HTML内容 2. Python web框架的本质:
a. 收发socket消息 --> 按照HTTP协议消息格式去解析消息 b. 路径和要执行的函数的对应关系 --> 主要的业务逻辑 c. 字符串替换 --> 模板(特殊符号 --> 数据) 3. 一个完整得请求流程:
0. 启动服务端,等待客户端(用户的浏览器)来连接
1. 在浏览器地址栏输入URL,与服务端建立连接,浏览器发送请求
2. 服务端收到请求消息,解析请求消息,根据路径和函数的对应关系,找到将要执行的函数
3. 执行函数,打开HTML文件,进行字符串替换,得到一个最终要返回的HTML内容
4. 按照HTTP协议的消息格式要求,把HTML内容回复给用户浏览器(发送响应)
5. 浏览器收到响应的消息之后,按照HTML的规则渲染页面.
6. 关闭连接 2. Django昨日内容梳理:
0. Django安装
pip3 install django==1.11.11 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple/ django==1.11.11 PyCharm安装的时候:
注意不要勾选那个选项 (你们懂得) 1. Django项目的启动:
1. 命令行启动
在项目的根目录下(也就是有manage.py的那个目录),运行:
python3 manage.py runserver IP:端口--> 在指定的IP和端口启动
python3 manage.py runserver 端口 --> 在指定的端口启动
python3 manage.py runserver --> 默认在本机的8000端口启动 2. PyCharm启动
点绿色的小三角,直接可以启动Django项目(前提是小三角左边是你的Django项目名) 2. 配置相关 项目名/settings.py文件
1. Templates(存放HTML文件的配置) <-- 告诉Django去哪儿找我的HTML文件 2. 静态文件(css/js/图片)
# 静态文件保存目录的别名
STATIC_URL = '/static/' # 所有静态文件(css/js/图片)都放在我下面你配置的文件夹中
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
3. 注释掉setting.py中 带有 csrf 的那一行(大概45~47行) 3. 今日内容
1. 登录的完整示例 复习:
form表单往后端提交数据需要注意哪三点: 五一回来默写 <-- 谁写错成from谁就请大家吃雪糕
1. form不是from,所有获取用户输入的标签都应该放在form里面, 并且必须要有name属性
2. action属性控制往哪儿提交,method一般都设置成post
3. 提交按钮必须是type=submit,不能是别的类型 2. GET请求和POST请求
GET请求:
1. 浏览器请求一个页面
2. 搜索引擎检索关键字的时候 POST请求:
1. 浏览器向服务端提交数据,比如登录/注册等 3. Django中的APP:
什么是APP?以及为什么要用APP? project --> 项目 (老男孩教育大学校) APP --> 应用 (Linux学院/Python学院/大数据学院/Java学院) 方便我们在一个大的Django项目中,管理实现不同的业务功能. 1. 创建APP的命令
1. 命令行,在Django项目的根目录输入:
python3 manage.py startapp app名字 4. ORM import pymysql
pymysql.connect(
...
...
) 1. 不同的程序员写的SQL水平参差不齐
2. 执行效率也参差不齐 python语法 --自动翻译--> SQL语句 jQuery DOM
$("#d1") --自动翻译--> document.getElementById("d1") ORM:
优点:
1. 简单,不用自己写SQL语句
2. 开发效率高
缺点:
1. 记忆你这个特殊的语法
2. 相对于大神些的SQL语句,肯定执行效率有差距 ORM的对应关系:
类 ---> 数据表
对象 ---> 数据行
属性 ---> 字段 ORM能做的事儿:
1. 操作数据表 --> 创建表/删除表/修改表
操作models.py里面的类 2. 操作数据行 --> 数据的增删改查 不能创建数据库,自己动手创建数据库 使用Django的ORM详细步骤:
1. 自己动手创建数据库
create database 数据库名;
2. 在Django项目中设置连接数据库的相关配置(告诉Django连接哪一个数据库)
# 数据库相关的配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 连接的数据库类型
'HOST': '127.0.0.1', # 连接数据库的地址
'PORT': 3306, # 端口
'NAME': "day61", # 数据库名称
'USER': 'root', # 用户
'PASSWORD': '' # 密码
}
}
3. 告诉Django用pymysql代替默认的MySQLDB 连接MySQL数据库
在项目/__init__.py文件中,写下面两句:
import pymysql
# 告诉Django用pymysql来代替默认的MySQLdb
pymysql.install_as_MySQLdb()
4. 在app下面的models.py文件中定义一个类,这个类必须继承models.Model
class 类名(models.Model):
...
5. 执行两个命令
1. python3 manage.py makemigrations
2. python3 manage.py migrate ORM单表的增加和查询:
1. 查询
models.UserInfo.objects.all() #这个是一个对象 2. 增加
models.UserInfo.objects.create(name="张三")
3.删除
models.UserInfo.objects.filter(id=nid).delete()
4 修改
models.UserInfo.objects.filter(id=nid).update(name=username)
使用Django实现数据库的增删改查
from django.shortcuts import render, redirect, HttpResponse
from app01 import models # 专门用来放函数
# 2018-9-4 21:32:46 睡觉去!!啦啦啦明天继续!
def login(request):
# 如果你是POST请求
if request.method == "POST": # 这里必须是大写
# 如果你是POST请求,我就取出提交的数据,做登入判断
# 获取用户提交数据
email = request.POST.get("email", None)
pwd = request.POST.get("pwd", None)
print(email, pwd)
# 做是否登入成功的判断
if email == "1076176004@qq.com" and pwd == "":
# 登入成功
# redirect 回复一个特殊的响应,这个响应会让用户的浏览器请求指定的URL
return redirect("http://www.baidu.com")
else:
# 登入失败
error_msg = "邮箱或密码错误"
# render完成html页面的字符串替换
return render(request, "login.html", {"error": error_msg})
# 不是POST请求就走下面这一句
return render(request, "login.html") # 2018-9-5 16:09:55
# 展示所有用户的函数
def user_list(request):
# 去数据库中查询所有的用用户
# 利用ORM这个工具去查询数据库,不用自己去查询
ret = models.UserInfo.objects.all()
print(ret[0].id, ret[0].name)
# 打开user_html文件
return render(request, "user_list.html", {"user_list": ret})
# return HttpResponse("别闹了!") # 添加用用户的函数
def add_user(request):
if request.method == "POST":
# 用户填写了新的用户名,并发送了POST请求
new_name = request.POST.get("username", None)
# 去数据库中新创建一条用户记录
models.UserInfo.objects.create(name=new_name)
# 添加成功后直接跳转到用户列表页
return redirect("/user_list/")
# 第一个请求页面的时候,就返回一个页面,页面上有两个框让用户填写
return render(request, "add_user.html") # 修改用户的函数
def edit_user(request):
if request.method == "GET":
# 找到用户的ID
nid = request.GET.get("nid")
# 根据id找到用户的名字 这找到的是对象
result = models.UserInfo.objects.get(id=nid)
# result.name result.id
return render(request, 'edit_user.html', {'result': result})
else:
nid = request.GET.get('nid')
username = request.POST.get('username')
models.UserInfo.objects.filter(id=nid).update(name=username)
return redirect("/user_list/") # 删除用户的函数
def del_user(request):
# 在页面提交时候有nid
nid = request.GET.get("nid")
# 根据id删除user
models.UserInfo.objects.filter(id=nid).delete()
return redirect("/user_list/")
user_list.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户列表页</title>
</head>
<body> <a href="/add_user/">添加用户</a> <table border="">
<thead>
<tr>
<th>id值</th>
<th>用户名</th>
</tr>
</thead>
<tbody> {% for user in user_list %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.name }}</td>
{# 提交的时候,加上nid 方便修改时候找到ID #}
<td><a href="/edit_user/?nid={{ user.id }}">编辑</a></td>
{# 提交的时候,加上nid 方便删除时候找到ID #}
<td><a href="/del_user/?nid={{ user.id }}">删除</a></td>
</tr>
{% endfor %} </tbody>
</table>
</body>
</html>
add_user.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加用户</title>
</head>
<body> <form action="/add_user/" method="post">
<p>用户名:
<input type="text" name="username">
</p> <p>
<input type="submit" value="提交">
</p>
</form> </body>
</html>
edit_user.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>编辑用户</title>
</head>
<body> <form action="/edit_user/?nid={{ result.id }}" method="post" >
<p>用户名:
<input type="text" name="username" value="{{ result.name}}">
</p> <p>
<input type="submit" value="提交">
</p>
</form> </body>
</html>
9.5Django操作数据库的增删改查的更多相关文章
- java操作数据库:增删改查
不多bb了直接上. 工具:myeclipse 2016,mysql 5.7 目的:java操作数据库增删改查商品信息 test数据库的goods表 gid主键,自增 1.实体类Goods:封装数据库数 ...
- python测试开发django-13.操作数据库(增删改查)
前言 django的models模块里面可以新增一张表和字段,通常页面上的数据操作都来源于数据库的增删改查,django如何对msyql数据库增删改查操作呢? 本篇详细讲解django操作mysql数 ...
- Java操作数据库实现"增删改查"
本文主要讲解JDBC操作数据库 主要实现对MySql数据库的"增删改查" 综合概述: JDBC的常用类和接口 一 DriverManager类 DriverManage类 ...
- Java数据库连接——JDBC基础知识(操作数据库:增删改查)
一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...
- Java数据库连接--JDBC基础知识(操作数据库:增删改查)
一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...
- c#操作数据库的增删改查语句及DataGridView简单使用
下面是要用户名和密码连接数据库的操作: 一.定义连接字符串,用来链接SQL Server string str_con = "server=.(服务器名称一般为 . );database=W ...
- C#通过窗体应用程序操作数据库(增删改查)
为了体现面向对象的思想,我们把“增删改查”这些函数封装到一个数据库操作类里: 为了便于窗体程序与数据库之间进行数据交互,我们建一个具有数据库行数据的类,通过它方便的在窗体程序与数据库之间传输数据: 我 ...
- datagridview数据绑定操作数据库实现增删改查
DataSet数据集,数据缓存在客户端内存中,支持断开式连接.DataGridView控件绑定DataSet时,它自动的改变的DS的行的状态,而且在做增删改查的时候,可以借助SqlCommandBui ...
- java中如何操作数据库(增删改查)
EntityManager 是用来对实体Bean 进行操作的辅助类.他可以用来产生/删除持久化的实体Bean,通过主键查找实体bean,也可以通过EJB3 QL 语言查找满足条件的实体Bean.实体B ...
随机推荐
- WebGL 颜色与纹理
1.纹理坐标 纹理坐标是纹理图像上的坐标,通过纹理坐标可以在纹理图像上获取纹理颜色.WebGL系统中的纹理坐标系统是二维的,如图所示.为了将纹理坐标和广泛使用的x.y坐标区分开来,WebGL使用s和t ...
- Rob Whitfield:银行已准备好避免下一场金融危机的爆发
2014夏季达沃斯论坛于9月10日至12日在天津举行.来自全球90多个国家和地区的1600多位精英将就“推动创新 创造价值”这一主题展开激烈讨论.中国电子银行网全程直击,第一时间为您带来达沃斯最前方的 ...
- 使用System.Web.Optimization对CSS和JS文件合并压缩
在ASP.NET MVC 中JS/CSS文件动态合并及压缩通过调用System.Web.Optimization定义的类ScriptBundle及StyleBundle来实现. 大致步骤如下: 1.A ...
- Dubbo -- 系统学习 笔记 -- 配置参考手册
Dubbo -- 系统学习 笔记 -- 目录 配置参考手册 <dubbo:service/> <dubbo:reference/> <dubbo:protocol/> ...
- moment.js用法总结
moment(),获取当前时间 moment(string)把字符串变成moment时间格式 moment().format("YYYY-MM-DD HH:mm:ss"):规定时间 ...
- express不是内部或外部命令,也不是可运行的程序或批处理文件
如上安装了express以后,仍然报如下错误:express不是内部或外部命令,也不是可运行的程序或批处理文件 原因是版本问题:当前版本是4.0.0,改成3.5.0即可运行. npm install ...
- 存储过程中SELECT INTO的使用
在MySQL存储过程中使用SELECT …INTO语句为变量赋值: 用来将查询返回的一行的各个列值保存到局部变量中. 要求: 查询的结果集中只能有1行. SELECT col_name[,...] I ...
- 使用librtmp进行H264与AAC直播
libx264 版本是 128libfaac 版本是 1.28 1.帧的划分 1.1 H.264 帧 对于 H.264 而言每帧的界定符为 00 00 00 01 或者 00 00 01. 比如下面的 ...
- SaltStack 批量执行脚本
这里演示如何使用 salt-master 对多台 salt-minion 批量执行脚本,步骤如下: [root@localhost ~]$ cat /srv/salt/top.sls # 先定义入口配 ...
- Charles抓包(iOS的http/https请求)
Charles抓包(iOS的http/https请求) Charles安装 HTTP抓包 HTTPS抓包 1. Charles安装 官网下载安装Charles:https://www.charlesp ...