• 数据的使用、表关系的创建、Django框架的请求生命周期流程图


    目录

    一、数据的增删改查

    1. 用户列表的展示

    2. 修改数据的逻辑分析

    3. 删除功能的分析

    二、如何创建表关系

    三、Django的请求生命周期流程图


    一、数据的增删改查

    1. 用户列表的展示

    数据表中得用户数据都给查询出来展示在页面上

    查询数据

    1. def userlist(request):
    2. """展示用户数据"""
    3. # 1、 先查询数据表
    4. """这里不之处负数切片"""
    5. # user_list=models.UserInfo.objects.all()[0:2] # 查询所有的数据
    6. # user_list=models.UserInfo.objects.first() # 查询所有的数据
    7. # select *from userinfo where username ='kevin';
    8. # filter:类比where的使用
    9. # 只要返回的结果是queryset对象,那么就可以一直点方法下去
    10. # user_list=models.UserInfo.objects.filter(username='kevin').first() # 查询所有的数据
    11. user_list=models.UserInfo.objects.all() # 查询所有的数据
    12. # queryset对象就是一个列表套对象的形式
    13. # , , ]>
    14. # print(user_list[0])
    15. # print(user_list[0].username)
    16. # print(user_list[0].password)
    17. # print(user_list[0].gender)
    18. # print(user_list[1].gender)
    19. '''支持for循环'''
    20. # for i in user_list:
    21. # print(i.gender)
    22. return render(request, 'userlist.html', locals())
    23. def edit(request):
    24. """先接收id值"""
    25. edit_id = request.GET.get('id')
    26. """根据这个id值,再次去表中查询当前这条数据"""
    27. # ]>
    28. edit_obj=models.UserInfo.objects.filter(id=edit_id).first()
    29. if request.method == 'POST':
    30. hidden_id = request.POST.get('hidden_id')
    31. username = request.POST.get('username')
    32. password = request.POST.get('password')
    33. gender = request.POST.get('gender')

    2. 修改数据的逻辑分析

    1. 先确定修改哪条记录------>怎么样确定修改哪条记录?
    2. 通过什么字段可以确定唯一一条记录? 主键id,要携带主键id到后端.
    3. 在后端接收主键id值,然后根据这个id值再去表中查询数据,查询一条
    4. 然后把查询的数据在渲染到页面中,然后在修改
    5. 把修改之后的表单提交到后端,在做修改

    数据的修改

    1. # 第一种方式的修改
    2. affect_rows=models.UserInfo.objects.filter(pk=hidden_id).update(username=username, password=password, gender=gender)
    3. # print(affect_rows)
    4. # 第二种方式的修改
    5. edit_obj.username=username
    6. edit_obj.password=password
    7. edit_obj.gender=gender
    8. edit_obj.save() # 保存数据的
    9. # 跳转地址到列表展示也
    10. return redirect('/userlist/')
    11. return render(request, 'edit.html', locals())

    数据的添加

    1. def delete(request):
    2. """1、还是要接收前端传过来的主键id值"""
    3. delete_id = request.GET.get('id')
    4. # delete from userinfo where id = 1;
    5. # models.UserInfo.objects.filter(pk=delete_id).delete()
    6. # user_obj = models.UserInfo.objects.filter(pk=delete_id).first()
    7. # user_obj.delete()
    8. return redirect('/userlist/')
    9. def add(request):
    10. if request.method == 'POST':
    11. username = request.POST.get('username')
    12. password = request.POST.get('password')
    13. gender = request.POST.get('gender')
    14. """操作数据量添加数据"""
    15. # 返回的是当前记录的对象
    16. # user_obj=models.UserInfo.objects.create(username=username, password=password, gender=gender)
    17. # print(user_obj) # pyy
    18. # print(user_obj.gender)
    19. # print(user_obj.pk)
    20. """第二种方式添加"""
    21. user_obj = models.UserInfo(username=username,password=password,gender=gender)
    22. user_obj.save()
    23. return redirect('/userlist/')
    24. return render(request, 'add.html')

    3. 删除功能的分析

    • 给删除按钮加一个链接,携带当前记录的id值
    • 后端要接收这个主键id值
    • 后端直接执行删除操作

    数据的删除

    二、如何创建表关系

    • 一对一 
    • 一对多 
    • 多对多
    • 没有关系

    以图书管理系统为例

    • 图书表
    • 出版社表
    • 作者表
    • 作者详情表

    换位思考判断表关系

    • 图书表和出版社表        >>>      一对多      >>>   图书表是多,出版社是一    >>> 建在多的一方
    • 图书表和作者表            >>>      多对多     >>>   需要第三张表
    • 作者表和作者详情表    >>>       一对一     >>>  外键字段一般建在查询频率较高的

    在Django中如何创建表关系

    1. class Book(models.Model):
    2. title = models.CharField(max_length=64)
    3. """
    4. max_digits=None,:总位数
    5. decimal_places=None:小数位数
    6. """
    7. # price decimal(8,2)
    8. price = models.DecimalField(max_digits=8, decimal_places=2)
    9. # publish_id = models.ForeignKey(to='Publish', to_field='id')
    10. """对于外键字段关系,会自动帮我们拼接_id"""
    11. publish = models.ForeignKey(to='Publish')
    12. """authors它是一个虚拟字段,它不会实际在表中创建出来这个字段,
    13. 这一句可以自动帮助我们创建出来第三张表"""
    14. authors = models.ManyToManyField(to='Author')
    1. """出版社表"""
    2. class Publish(models.Model):
    3. name = models.CharField(max_length=64)
    4. addr = models.CharField(max_length=64)
    1. """作者表"""
    2. class Author(models.Model):
    3. name = models.CharField(max_length=64)
    4. author_detail = models.OneToOneField(to='AuthorDetail')
    1. """作者详情表"""
    2. class AuthorDetail(models.Model):
    3. phone = models.CharField(max_length=64)
    4. email = models.CharField(max_length=64)

    三、Django的请求生命周期流程图

  • 相关阅读:
    #gStore-weekly | gAnswer源码解析 查询图生成
    纯CSS实现“流星赶月”,祝大家中秋节快乐
    PIC单片机3——外部中断
    Python的pip换源详解
    Python 编程语言的介绍
    【数据结构】二叉树中 堆的实现方法
    ICLR 19 :APPNP + ICML 20 GCNII
    Django学习笔记——文件上传(界面还怪好看得嘞)
    ETCD快速入门-03 常用命令
    python+django+mysql鲜花水果购物网站毕业设计毕设开题报告
  • 原文地址:https://blog.csdn.net/qq_53842456/article/details/134337116