一 django生命周期

1 浏览器输入一个请求(get/post)
2 响应到django程序中
3 执行到url,url通过请求的地址匹配到不同的视图函数
4 执行对应的视图函数,此过程可以查询数据库,拿到模板
5 查询完数据库得到数据,将数据渲染到模板上
6 返回浏览器

二 用户增删改查

1 orm介绍

tools--->Run manage.py Task
python3 manage.py makemigrations
只需要敲命令:makemigrations(记录数据库的修改记录)
python3 manage.py migrate
只需要敲命令:migrate(把数据同步到数据库)

2 orm能干和不能干的事

1 能创建数据表,新增,删除字段
2 不能创建数据库

3 orm增加字段:(注意数据库迁移命令2条)

注意:后来增加的字段,需要有默认值
phone=models.CharField(max_length=64,default='120')

4 删除字段

注释掉字段,执行数据库迁移命令

5 修改数据

直接修改字段,执行数据库迁移命令

6 user的增删改查

***重点****:
1 单表查询所有用户:models.User.objects.all()
得到的是 queryset对象(当成列表),列表里面,一个一个的对象[user1,user2]
2 render(request, 'userlist.html', {'user_list': ret})
3 模板里: {% for user in user_list %}
#要循环的内容
{{user.name}}
{% endfor%}
4 get请求携带参数:
http://127.0.0.1:8000/deleteuser/?id=1
后台取值:request.GET.get('id')
request.GET['id']
5 orm删除记录 models.User.objects.filter(id=id).delete()
返回值:影响的行数
6 前台post提交的数据取值:name=request.POST.get('name')
7 orm保存:
两种方式:
1 user=models.User.objects.create(name=name,password=pwd,address=addr)
2 user=models.User(name=name,password=pwd,address=addr)
user.save()
8 orm查询单条数据:user=models.User.objects.filter(id=id).first()
9 orm的修改 models.User.objects.filter(id=id).update(name=name,password=pwd,
address=addr)

代码示例

urls.py

from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^userlist/', views.userlist),
url(r'^deleteuser/', views.deleteuser),
url(r'^adduser/', views.adduser),
url(r'^updateuser/', views.updateuser),
]

查:

def userlist(request):
if request.method == 'GET':
# 查询user表中所有数据.--相当于sql select * from app01_user;
# 返回结果是QuerySet对象(先当成列表)
# [user1,user2]
ret = models.User.objects.all()
# print(type(ret))
# for i in ret:
# print(type(i))
# print(i.name)
return render(request, 'userlist.html', {'user_list': ret})
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<table border="1">
<thead>
<tr>
<th>id</th>
<th>name</th>
<th>password</th>
<th>addr</th>
<th>删除</th>
<th>编辑</th>
</tr>
</thead>
<tbody>
{% for user in user_list %}
<tr>
<td>{{ user.id }}</td>
<td>{{ user.name }}</td>
<td>{{ user.password }}</td>
<td>{{ user.address }}</td>
<td><a href="/deleteuser?id={{ user.id }}">删除</a></td>
<td><a href="/updateuser?id={{ user.id }}">编辑</a></td>
</tr>
{% endfor %} </tbody> <a href="/adduser/">新增用户</a>
</table>
</body>
</html>

删:

def deleteuser(request):
if request.method == 'GET':
id = request.GET.get('id')
ret = models.User.objects.filter(id=id).delete()
print(ret)
return redirect('/userlist/')

添加:

def adduser(request):
if request.method=='GET':
return render(request,'adduser.html')
elif request.method=='POST':
name=request.POST.get('name')
pwd=request.POST.get('password')
addr=request.POST.get('addr')
# 方式一
# user=models.User.objects.create(name=name,password=pwd,address=addr)
# 方式二
user=models.User(name=name,password=pwd,address=addr)
user.save()
print(user.name)
print(type(user))
return redirect('/userlist/')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>新增用户</title>
</head>
<body>
<form action="" method="post">
<p>用户名: <input type="text" name="name"></p>
<p>密码: <input type="password" name="password"></p>
<p>地址: <input type="text" name="addr"></p>
<input type="submit" value="提交"> </form>
</body>
</html>

修改:

def updateuser(request):
if request.method=='GET':
id=request.GET.get('id')
user=models.User.objects.filter(id=id).first()
return render(request,'updateuser.html',{'user':user})
if request.method=='POST':
id=request.POST.get('id')
# id2=request.GET.get('id')
# print(id)
# print(id2)
name=request.POST.get('name')
pwd=request.POST.get('password')
addr=request.POST.get('addr')
models.User.objects.filter(id=id).update(name=name,password=pwd,address=addr)
return redirect('/userlist/')
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>修改数据</title>
</head>
<body>
<form action="/updateuser/?id={{ user.id }}" method="post">
<p><input type="hidden" name="id" value="{{ user.id }}"></p>
<p>用户名: <input type="text" name="name" value="{{ user.name }}"></p>
<p>密码: <input type="text" name="password" value="{{ user.password }}"></p>
<p>地址: <input type="text" name="addr" value="{{ user.address }}"></p>
<input type="submit" value="提交"> </form>
</body>
</html>

三 数据库操作

class Publish(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
email = models.EmailField()
addr = models.CharField(max_length=64)
class Author(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
address = models.CharField(max_length=32)
class Book(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
小数部分占2位
price = models.DecimalField(max_digits=5, decimal_places=2)
一对多的关系确立,关联字段写在多的一方,orm自动在publish后面加id,publish_id
publish = models.ForeignKey(to='Publish', to_field='id')
多对多关系,orm会自动创建第三张表
authors = models.ManyToManyField(to='Author')

用户增删改查 django生命周期 数据库操作的更多相关文章

  1. 第二百七十六节,MySQL数据库,【显示、创建、选定、删除数据库】,【用户管理、对用户增删改查以及授权】

    MySQL数据库,[显示.创建.选定.删除数据库],[用户管理.对用户增删改查以及授权] 1.显示数据库 SHOW DATABASES;显示数据库 SHOW DATABASES; mysql - 用户 ...

  2. jdbc 增删改查以及遇见的 数据库报错Can't get hostname for your address如何解决

    最近开始复习以前学过的JDBC今天肝了一晚上 来睡睡回笼觉,长话短说 我们现在开始. 我们先写一个获取数据库连接的jdbc封装类 以后可以用 如果不是maven环境的话在src文件下新建一个db.pr ...

  3. ASP.NET学习笔记(3)——用户增删改查(三层)

    说明(2017-10-6 11:21:58): 1. 十一放假在家也没写几行代码,本来还想着利用假期把asp.net看完,结果天天喝酒睡觉,回去的票也没买到,惨.. 2. 断断续续的把用户信息的页面写 ...

  4. Java学生信息增删改查(并没用数据库)

    一个泛型的应用,Java版本增删改查,写的简陋,望批评指正 2016-07-02 很久前写的一个程序了.拿出来存一下,不是为了展示啥,自己用的时候还可以看看.写的很粗糙. import java.io ...

  5. IDEA+Maven 整合SSM框架实现简单的增删改查(新手入门,傻瓜操作)

    原博客地址:https://blog.csdn.net/khxu666/article/details/79851070 选用SSM框架的原因在目前的企业级Java应用中,Spring框架是必须的.S ...

  6. 页面循环绑定(变量污染问题),js面向对象编程(对象属性增删改查),js字符串操作,js数组操作

    页面循环绑定(变量污染问题) var lis = document.querySelectorAll(".ul li") for ( var i = 0 ; i < lis. ...

  7. 1、list 的一些相关操作 2、增删改查 3、tuple 的操作 4、range

    1. list(增删改查) 列表可以装大量的数据. 不限制数据类型. 表示方式:[] 方括号中的每一项用逗号隔开 列表和字符串一样.也有索引和切片 # lst = [1, "周杰伦" ...

  8. 仅支持基本增删改查的学生自制php操作mysql的工具类 DB.class.php (学生笔记)

    <?php class DB{ //主机地址 var $host; //用户名 var $username; //密码 var $password; //数据库名 var $dbname; // ...

  9. Django - 基于orm实现用户增删改查

    1.基于orm实现用户新增 user_info.html中,增加代码: views.py中,在原user_info函数中,增加判断代码: 备注:最后一句,可以通过return redirect 实现, ...

随机推荐

  1. js根据当前日期 求一个月前 半年前 一年前的日期

    function p(s) {        return s < 10 ? '0' + s: s;}getlastmonth() function getlastmonth() {    va ...

  2. ubuntu16.04 pcl安装教程

    https://blog.csdn.net/zkj126521/article/details/80157351 https://blog.csdn.net/e_small/article/detai ...

  3. Java 知识点(二)

    接<Java 知识点(一)> java的输入输出与 c 语言不同,下面介绍Java的格式: 16.因为Java的输入类Scanner,定义在java.util包中,所以Java需要输入时要 ...

  4. Java - 记录String中intern()方法的学习与理解

    intern()方法:把堆中的引用丢入常量池中,然后返回这个引用.当常量池中已经存在这个引用,就直接返回这个引用.(jdk1.8) 由于jdk1.7中将字符串常量池改为存放在堆中,因此intern() ...

  5. Windows下将Python源代码.py文件封装成exe可执行文件方法

    安装pyinstaller cmd中使用pip安装 pip install pyinstaller 同时会自动安装pywin32(pip真慢50M这里就走20KB),可以进行切换为国内源进行提速. 就 ...

  6. 吴裕雄--天生自然深度学习TensorBoard可视化:projector_MNIST

    import os import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data from te ...

  7. 基于redis实现锁控制

    多数据源 数据源1为锁控制,数据源2自定义,可用于存储. 锁:当出现并发的时候为了保证数据的一致性,不会出现并发问题,假设,用户1修改一条信息,用户2也同时修改,会按照顺序覆盖自修改的值,为了避免这种

  8. ios 监控键盘状态

    增加键盘显示和隐藏事件监听 NotificationCenter.default.addObserver(self, selector: #selector(keyboardWillShow(noti ...

  9. 并发与高并发(三)-CPU多级缓存の乱序执行优化

    一.CPU多级缓存-乱序执行优化 处理器或编译器为提高运算速度而做出违背代码原有顺序的优化. 重排序遵循原则as-if-serial as-if-serial语义:不管怎么重排序(编译器和处理器为了提 ...

  10. 计量经济与时间序列_ACF与PACF标准差(均标准误)的计算(含代码)

    1   我们对于acf和pacf值计算完毕之后,在需要计算两个数值的标准差. 2   acf和pacf的标准差计算略有不同.acf的标准差是一个移动过程,而pacf是一个相对固定过程. 3   我们继 ...