• 【Django】开发日报_2.2_Day:ORM-增删改查


    目录

    0、创建测试用例:

    1、在表中新增数据:

    2、在表中删除元素

    (1)有条件删除

    (2)无条件,删除表中全部信息

    3、获取表中数据

    (1)获取全部数据

    (2)获取有条件筛选的数据

    (3)获取列表中的首行数据

    4、更新表中数据

    5、测试案例:用户管理程序

     (1)展示用户列表

     (2)添加用户

     (3)删除用户

     (4)修改用户


    0、创建测试用例:

    djangoproject->urls.py

    1. from django.urls import path
    2. from app import views
    3. urlpatterns = [
    4. path('index/', views.index),
    5. path('user/list/',views.user_list),
    6. path('user/add/',views.user_add),
    7. path('tpl/',views.tpl),
    8. path('news/',views.news),
    9. path('something/',views.something),
    10. #用户登录
    11. path('login/',views.login),
    12. #orm测试
    13. path('ormtest/',views.ormtest),
    14. ]

    app->models.py

    1. from django.db import models
    2. # Create your models here.
    3. class UserInfo2(models.Model):
    4. name = models.CharField(max_length=32)
    5. password = models.CharField(max_length=64)
    6. #age = models.IntegerField()
    7. class Department(models.Model):
    8. title = models.CharField(max_length=50)
    9. Dep_No = models.IntegerField(default=10)
    10. Dep_Na = models.CharField(max_length=100)
    11. Dep_data = models.IntegerField(null=True,blank=True)
    12. class Employees(models.Model):
    13. emp_id = models.CharField(max_length=10)
    14. position = models.CharField(max_length=50)
    15. class Student(models.Model):
    16. name = models.CharField(max_length=100)
    17. sex = models.CharField(max_length=5)
    18. age = models.IntegerField(default=18)

    app->views.py

    1. from app.models import Student,Employees,Department,UserInfo2
    2. def ormtest(request):
    3. #刷新页面测试数据表是否有操作
    4. return render(request,'ormtest.html')

    app->templates->ormtest.html

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>Titletitle>
    6. head>
    7. <body>
    8. <h1>Test is Successful!h1>
    9. body>
    10. html>

    1、在表中新增数据:

    语法:类名.object.create(添加字段)

    例如:

    Student.objects.create(name="张三",age=19)

    在views中写入以下测试用例:

    1. from app.models import Student,Employees,Department,UserInfo2
    2. def ormtest(request):
    3. #student
    4. #Student.objects.create(name="张三",age=19)
    5. #Student.objects.create(name="李华",sex="男",age=17)
    6. #Student.objects.create(name="王刚",sex="女")
    7. #employees
    8. #Employees.objects.create(emp_id=10010,position="技术部")
    9. #Employees.objects.create(emp_id=10012, position="董事部")
    10. #UserInfo2
    11. #UserInfo2.objects.create(name="小强",password=123456)
    12. #UserInfo2.objects.create(name="小明", password=123456)
    13. #UserInfo2.objects.create(name="小红", password=123456)
    14. return render(request,'ormtest.html')

    访问页面:

    访问数据库:

     

     可看到是否插入成功。

    2、在表中删除元素

    (1)有条件删除

    语法:类名.objects.filter(删除条件).delete()

    示例:

    Student.objects.filter(id=1).delete()

     这里的filter相当于sql语句中的where。

    (2)无条件,删除表中全部信息

    语法:类名.objects.all().delete()

    示例:

    Student.objects.all().delete()

    结果:

    3、获取表中数据

    (1)获取全部数据

    1. data_list = Employees.objects.all()
    2. print(data_list)

    从数据表获取的数据以对象的形式封装在列表中:

     

    想要获取对象里面的内容,可以在后面加个点来表示

     print(data_list[0].id,data_list[0].emp_id,data_list[0].position)

    数据过多,也可以用循环来迭代:

    1. data_list = Employees.objects.all()
    2. for obj in data_list:
    3. print(obj.emp_id,obj.position)

     

    (2)获取有条件筛选的数据

    1. obj = Employees.objects.filter(emp_id=10010)
    2. print(obj)

    (3)获取列表中的首行数据

    1. obj = Employees.objects.filter(emp_id=10010).first()
    2. obk = Department.objects.all().first()

    4、更新表中数据

    1. UserInfo2.objects.all().update(password="111111")
    2. UserInfo2.objects.filter(id=2).update(password="222222")
    3. UserInfo2.objects.filter(name="小明").update(password="333333")

     views.py

    1. from app.models import Student,Employees,Department,UserInfo2
    2. def ormtest(request):
    3. #-------------------1、新建---------------------------
    4. #student
    5. #Student.objects.create(name="张三",age=19)
    6. #Student.objects.create(name="李华",sex="男",age=17)
    7. #Student.objects.create(name="王刚",sex="女")
    8. #employees
    9. #Employees.objects.create(emp_id=10010,position="技术部")
    10. #Employees.objects.create(emp_id=10012, position="董事部")
    11. #UserInfo2
    12. #UserInfo2.objects.create(name="小强",password=123456)
    13. #UserInfo2.objects.create(name="小明", password=123456)
    14. #UserInfo2.objects.create(name="小红", password=123456)
    15. #---------------------2、删除------------------------------
    16. #Student.objects.filter(id=1).delete()
    17. #Student.objects.all().delete()
    18. #---------------------3、获取------------------------------
    19. #obj = Employees.objects.filter(emp_id=10010).first()
    20. #obk = Department.objects.all().first()
    21. #print(obj)
    22. #print(obk)
    23. #---------------------4、修改------------------------------
    24. # UserInfo2.objects.all().update(password="111111")
    25. # UserInfo2.objects.filter(id=2).update(password="222222")
    26. # UserInfo2.objects.filter(name="小明").update(password="333333")
    27. return render(request,'ormtest.html')

    5、测试案例:用户管理程序

    项目需求:

    (1)展示用户列表

            思路:

                    先写一个url,

                    再写views视图函数,函数功能实现:

                            1、获取所有用户信息

                            2、HTML渲染。

    models.py

    1. class UserInfo2(models.Model):
    2. name = models.CharField(max_length=32)
    3. password = models.CharField(max_length=64)
    4. age = models.IntegerField(default=18)

    urls.py

    1. #用户管理
    2. path('info/list/',views.info_list),

    views.py

    1. def info_list(request):
    2. #1、获取用户数据库中所有信息
    3. data_list=UserInfo2.objects.all()
    4. print(data_list)
    5. return render(request,'info_list.html',{"data_list":data_list})

    info_list.html

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>INFOLISTtitle>
    6. head>
    7. <body>
    8. <h1>INFO列表h1>
    9. <table border="1">
    10. <thead>
    11. <tr>
    12. <th>IDth>
    13. <th>姓名th>
    14. <th>密码th>
    15. <th>年龄th>
    16. tr>
    17. thead>
    18. <tbody>
    19. {% for item in data_list %}
    20. <tr>
    21. <td>{{ item.id }}td>
    22. <td>{{ item.name }}td>
    23. <td>{{ item.password }}td>
    24. <td>{{ item.age }}td>
    25. tr>
    26. {% endfor %}
    27. tbody>
    28. table>
    29. body>
    30. html>

    网页:

    数据库:

     

    获取成功!

     (2)添加用户

    思路:

            添加url

            编写视图函数

                    1、先发送GET请求,看到页面,输入内容

                    2、发送POST请求,输入内容,提交,写入数据库。

    url.py

    1. #添加用户
    2. path('info/list/add/',views.info_list_add),

    views.py

    1. def info_list_add(request):
    2. if request.method == "GET":
    3. return render(request,'info_list_add.html')
    4. #不执行if语句则请求方法为POST;获取用户提交的数据
    5. user = request.POST.get("user")
    6. pwd = request.POST.get("pwd")
    7. age = request.POST.get("age")
    8. #添加数据到数据库
    9. UserInfo2.objects.create(name=user,password=pwd,age=age)
    10. #自动跳转到用户列表页面
    11. #return redirect("http://127.0.0.1:8000/info/list/")
    12. return redirect("/info/list/")

    info_list_add.html

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>ADDtitle>
    6. head>
    7. <body>
    8. <h1>添加用户h1>
    9. <form method="post" action="/info/list/add/">
    10. {% csrf_token %}
    11. <input type="text" name="user" placeholder="用户名">
    12. <input type="text" name="pwd" placeholder="密码">
    13. <input type="text" name="age" placeholder="年龄">
    14. <input type="submit" value="提交">
    15. form>
    16. body>
    17. html>

    演示:

    数据库

    优化一下:

    在列表页面加上添加跳转按钮

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>INFOLISTtitle>
    6. head>
    7. <body>
    8. <h1>INFO列表h1>
    9. <a href="/info/list/add/">添加a>
    10. <table border="1">
    11. <thead>
    12. <tr>
    13. <th>IDth>
    14. <th>姓名th>
    15. <th>密码th>
    16. <th>年龄th>
    17. tr>
    18. thead>
    19. <tbody>
    20. {% for item in data_list %}
    21. <tr>
    22. <td>{{ item.id }}td>
    23. <td>{{ item.name }}td>
    24. <td>{{ item.password }}td>
    25. <td>{{ item.age }}td>
    26. tr>
    27. {% endfor %}
    28. tbody>
    29. table>
    30. body>
    31. html>

     网页:

     (3)删除用户

            思路:

                    1、先写url

                    2、再写views函数

                            (1)通过url网址传递的参数,判断删除条件:

                                    http://127.0.0.1:8000/info/list/delete?id=1

                                    ……

                            (2)id = request.GET。get("id")

                                    UserInfo.objects.filter(id=id).delete()

    urls.py

    1. #删除用户
    2. path('info/list/delete/',views.info_list_delete),

    views.py

    1. def info_list_delete(request):
    2. id = request.GET.get('id')
    3. UserInfo2.objects.filter(id=id).delete()
    4. return HttpResponse("删除成功")

    访问: 

     id为10的已经被删除

     由于手动在url中编写参数过于麻烦,所以做如下改进:

    info_list.html

    1. html>
    2. <html lang="en">
    3. <head>
    4. <meta charset="UTF-8">
    5. <title>INFOLISTtitle>
    6. head>
    7. <body>
    8. <h1>INFO列表h1>
    9. <a href="/info/list/add/">添加a>
    10. <table border="1">
    11. <thead>
    12. <tr>
    13. <th>IDth>
    14. <th>姓名th>
    15. <th>密码th>
    16. <th>年龄th>
    17. <th>操作th>
    18. tr>
    19. thead>
    20. <tbody>
    21. {% for item in data_list %}
    22. <tr>
    23. <td>{{ item.id }}td>
    24. <td>{{ item.name }}td>
    25. <td>{{ item.password }}td>
    26. <td>{{ item.age }}td>
    27. <td>
    28. <a href="/info/list/delete/?id={{ item.id }}">删除a>
    29. td>
    30. tr>
    31. {% endfor %}
    32. tbody>
    33. table>
    34. body>
    35. html>

    views.py

    1. def info_list_delete(request):
    2. id = request.GET.get('id')
    3. UserInfo2.objects.filter(id=id).delete()
    4. return redirect("/info/list/")

    访问:

     点击操作栏,即可删除数据并返回当前列表界面

     (4)修改用户

            等待后期更简单的方法。

  • 相关阅读:
    python folium 添加地图采样点及距离测量等属性
    并查集——最小生成树算法Kruskal
    一键自动化博客发布工具,用过的人都说好(头条篇)
    内创业革命
    MySQL读取的记录和我想象的不一致——事物隔离级别和MVCC
    用C语言列出Linux或Unix上的网络适配器
    【数据结构-零基础学习】线索二叉树(代码+图示+解析)
    Python语言开发学习之使用Python预测天气
    认识Modbus通信协议(笔记)
    目标检测YOLO实战应用案例100讲-面向小目标检测的多尺度特征融合(续)
  • 原文地址:https://blog.csdn.net/qq_51701007/article/details/126800769