一 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. 《打造扛得住的MySQL数据库架构》第4章 MySQL数据库结构优化

    4-1 数据库结构优化介绍 良好的数据库逻辑设计和物理设计是数据库获得高性能的基础. 1.减少不必要的数据冗余. 2.尽量避免数据维护中出现更新,插入和删除异常. 插入异常:如果表中的某个实体随着另一 ...

  2. iOS 通过有alpha值的图片创建蒙版

    @interface ViewController () @property (nonatomic, weak) IBOutlet UIImageView *imageView; @end @impl ...

  3. Tomcat启动报内存溢出错误:java.lang.OutOfMemoryError: PermGen space

    windows操作系统 找到D:\Tomcat-7\apache-tomcat-7.0.28\bin(解压安装的Tomcat)目录下的catalina.bat文件,打开该文件,找到下图所示的内容:添加 ...

  4. keil5最新破解教程(可以使用到2032年哦!):

    keil5最新破解教程(可以使用到2032年哦!): 首先附上破解软件下载链接:https://github.com/lzfyh2017/keil5- 相信不少小伙伴使用的keil5都快要到期了,那么 ...

  5. Jupyer Notebook, Jupyter Lab 虚拟环境配置

    虚拟环境 conda create -n python36 python=3.6 使用以下命令激活: activate python36 Notebook 安装插件 conda install nb_ ...

  6. caffe不同lr_policy参数设置方法

    fixed 参数: base_lr: 0.01 lr_policy: "fixed" max_iter: 400000 step 参数: base_lr: 0.01 lr_poli ...

  7. DRF框架之ModelSerializer序列化器

    ModelSerializer是Serializer的子类,序列化和反序列化跟Serializer一样. ModelSerializer与常规的Serializer相同,但提供了: 基于模型类自动生成 ...

  8. ESLint javascript格式要求

    首行缩进2个空格 eslint: indent functionhello (name) { console.log('hi', name) } 字符串使用单引号(除了避免转义) eslint: qu ...

  9. linuxmint截图

    利用import命令截图,并设置快捷键 shift + PrtScrSysRq: 选中区域截图. 设置快捷键的时候,提示: Ctrl + PrtScrSysRq: 复制截图到剪切板 PrtScrSys ...

  10. ZZJ_淘淘商城项目:day03(淘淘商城02 - 后台系统功能实现)

    1.   今日大纲 1.  学习Nginx的使用 2.  实现商品的管理 a)       新增商品 b)       查询商品列表 c)       编辑商品 d)       删除商品 e)    ...