计算机基础知识50

数据的增删改查(insert update delete select)

用户列表的展示:

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

  1. 查询
python 复制代码
from app01 import models
models.UserInfo.objects.all() # 查询所有的字段信息和数据
res=models.UserInfo.objects.first() # 查询一条,而且是第一条,queryset对象,列表套对象的形式
if res:
    res[0]
try:
    res[0]
# 它是支持索引取值的,如果是第一条就直接first()
select * from userinfo where username ='' and password = '';
res=models.UserInfo.objects.filter(username='', password='').first()  # and
res=models.UserInfo.objects.filter(username='').filter(password='').filter().first() # and
"""链式表达式的思想,jQuery中也有这样的写法"""
models.UserInfo.objects.all()[0]
models.UserInfo.objects.all()[0:2] # 支持切片
  1. 增加
python 复制代码
models.UserInfo.objects.create(username='', password='')
res=models.UserInfo(username='', password='')
res.save() # 真正的操作数据库

3、修改数据的逻辑分析

1. 先确定修改哪条记录------>怎么样确定修改哪条记录?

2. 通过什么字段可以确定唯一一条记录? 主键id,要携带主键id到后端.

3. 在后端接收主键id值,然后根据这个id值再去表中查询数据,查询一条

4. 然后把查询的数据在渲染到页面中,然后在修改

python 复制代码
models.UserInfo.objects.filter(pk=1).update(username='', password='')
res=models.UserInfo.objects.first()
res.username='';
res.password=''
res.save()    # 真正的操作数据库

4、删除功能的分析

1. 给删除按钮加一个链接,携带当前记录的id值

2. 后端要接收这个主键id值

3. 后端直接执行删除操作

python 复制代码
models.UserInfo.objects.filter(pk=1).delete()
res.delete()

数据的增删改查汇总

"views.py"

python 复制代码
from django.shortcuts import render,HttpResponse,reverse,redirect

# Create your views here.

def home(request):
    print('request')
    return HttpResponse('/home/')

from app01 import models

def login(request):
    print(request.method,type(request.method))
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        print(request.POST.getList('hobby'))
        res = models.UserInfo.objects.filter(username='123',password='123').all()
        print(res)
        res.username=''
        res.password=''
        if username == 'kevin' and password == '123':
            print('登录成功')
            models.UserInfo.objects.create(username='kevin',password='123')
            return redirect('/index/')
        else:
            return HttpResponse("用户名或密码错误")

    print(request.GET)
    print(request.GET.get('a'))
    print(request.GET.get('b'))
    print(request.GET.get('c'))
    print(request.GET.get('c'))
    print(request.GET.getlist('c'))
    return render(request,'login.html')

def userlist(request):
    user_list=models.UserInfo.objects.all()#查询所有信息
    """这里不之处负数切片"""
    # user_list=models.UserInfo.objects.all()[0:2] # 查询所有的数据
    '''支持for循环'''
    # for i in user_list:
    #     print(i.gender)
    ## queryset对象就是一个列表套对象的形式
    # <QuerySet [<UserInfo: UserInfo object>, <UserInfo: UserInfo object>, <UserInfo: UserInfo object>]>
    # print(user_list[0])
    print(user_list[0].username)
    return  render(request,'userlist.html',locals())

def edit(request):
    edit_id = request.GET.get('id')
    edit_ibj = models.UserInfo.objects.filter(id=edit_id).first()
    if request.method == 'POST':
        hidden_id = request.POST.get('hidden_id')
        username = request.POST.get('username')
        password = request.POST.get('password')
        gender = request.POST.get('gender')
        # 修改
        affect_rows = models.UserInfo.objects.filter(pk=hidden_id).update(username=username,password=password,gender=gender)
        return redirect('/userlist/')
    return render(request,'edit.html',locals())

def delete(request):
    delete_id = request('/userlist/')
    return redirect('/userlist/')

def add(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        gender = request.POST.get('gender')
        user_obj = models.UserInfo(username=username,password=password,gender=gender)
        user_obj.save()
        return redirect('/userlist/')
    return render(request,'add.html')

def ab_render(request):
    user_dict1 = {'username':'kevin','password':123}
    user_dict1 = {'a':1}
    print(locals())
    return render(request,'')

"urls.py"

python 复制代码
from django.contrib import admin
from django.urls import path
from app01 import views


urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', views.login),
    path('home/', views.home),
    path('userlist/', views.userlist),
    path('edit/', views.edit),
    path('delete/', views.delete),
    path('add/', views.add),
    path('ab_render/', views.ab_render),

]

"models.py"

python 复制代码
from django.db import models

# Create your models here.

class UserInfo(models.Model):
    username = models.CharField(max_length=32,verbose_name='用户名')
    password = models.CharField(max_length=64,verbose_name='密码')
    gender = models.CharField(max_length=32)

def __str__(self):
    return self.username

"init.py"

python 复制代码
import pymysql
pymysql.install_as_MySQLdb()

前端:"ab_render.html"

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>

{{ user_dict.username }}
{{ user_dict.password }}
{{ user_dict1 }}
{{ user_dict1.a }}
</body>
</html>

"add.html"

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <link rel="stylesheet" href="bootstrap-3.4.1-dist/css/bootstrap.min.css">
    <script src="bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <h1 class="text-center">添加页面</h1>
        <form action="" method="post">
            <div class="form-group">
                用户名:<input type="text" class="form-control" name="username">
            </div>
            <div class="form-group">
                密码:<input type="password" class="form-control" name="password">
            </div>
            <div class="form-group">
                性别:<input type="text" class="form-control" name="gender">
            </div>
        </form>
    </div>
</div>
</body>
</html>

"edit.html"

python 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <h1 class="text-center">修改页面</h1>
        <form action="" method="post">
            <input type="hidden" value="{{ edit_obj.pk }}" name="hidden_id">
            <div class="form-group">
                用户名: <input type="text" class="form-control" name="username" value="{{ edit_obj.username }}">
            </div>
            <div class="form-group">
                密码: <input type="password" class="form-control" name="password" value="{{ edit_obj.password }}">
            </div>
            <div class="form-group">
                性别: <input type="text" class="form-control" name="gender" value="{{ edit_obj.gender }}">
            </div>
            <div class="form-group">
                <input type="submit" class="btn btn-info btn-block" value="提交">
            </div>
        </form>
    </div>
</div>
</body>
</html>

"index.html"

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <link rel="stylesheet" href="bootstrap-3.4.1-dist/css/bootstrap.min.css">
    <style>
        h1{
            color: hotpink;
        }
    </style>
</head>
<body>
<h1>第一个模板文件</h1>
</body>
</html>

"login.html"

python 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <link rel="stylesheet" href="bootstrap-3.4.1-dist/css/bootstrap.min.css">
    <script src="bootstrap-3.4.1-dist/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <h1 class="text-center">登录页面</h1>
        <form action="" method="post">
            <div class="form-group">
                用户名:<input type="text" class="form-control " name="username">
            </div>
            <div class="form-group">
                密码:<input type="password" class="form-control " name="password">
            </div>
            <div class="form-group">
                <input type="checkbox" name="hobby" value="a">
                <input type="checkbox" name="hobby" value="b">
                <input type="checkbox" name="hobby" value="c">
            </div>
            <div class="form-group">
                <input type="submit" class="btn btn-success btn-block" value="登录">
            </div>
        </form>
    </div>
</div>
</body>
</html>

"userlist.html"

html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <h1 class="text-center">用户列表</h1>
        <a href="/add/" class="btn btn-success">添加用户</a>
        <table class="table table-striped table-hover table-bordered">
            <thead>
            <tr>
                <th>ID</th>
                <th>username</th>
                <th>password</th>
                <th>gender</th>
                <th>action</th>
            </tr>
            </thead>
            <tbody>
            {% for user in user_list %}
                <tr>
                    <td>{{ user.id }}</td>
                    <td>{{ user.username }}</td>
                    <td>{{ user.password }}</td>
                    <td>{{ user.gender }}</td>
                    <td>
                        <a href="/edit/?id={{ user.id }}" class="btn btn-success">修改</a>&nbsp;&nbsp;&nbsp;
                        <a href="/del/?id={{ user.pk }}" class="btn btn-danger">删除</a>
                    </td>
                </tr>
            {% endfor %}


            </tbody>
        </table>
    </div>
</div>
</body>
</html>

如何创建表关系(一对一 一对多 多对多)

换位思考法判断表关系

图书表和出版社表 >>> 一对多 >>> 图书表是多,出版社是一 >>> 建在多的一方

图书表和作者表 >>> 多对多 >>> 需要第三张表

作者表和作者详情表 >>> 一对一 >>> 外键字段一般建在查询频率较高的

在Django中如何创建表关系

"""回头复习表关系"""

python 复制代码
class Book(models.Model):
    title = models.CharField(max_length=64)
    """
    max_digits=None,:总位数
    decimal_places=None:小数位数
    """
    # price decimal(8,2)
    price = models.DecimalField(max_digits=8, decimal_places=2)
    # publish_id = models.ForeignKey(to='Publish', to_field='id')
    """对于外键字段关系,会自动帮我们拼接_id"""
    publish = models.ForeignKey(to='Publish')
    """authors它是一个虚拟字段,它不会实际在表中创建出来这个字段,这一句可以自动帮助我们创建出来第三张表"""
    authors = models.ManyToManyField(to='Author')

"""出版社表"""

python 复制代码
class Publish(models.Model):
    name = models.CharField(max_length=64)
    addr = models.CharField(max_length=64)

"""作者表"""

python 复制代码
class Author(models.Model):
    name = models.CharField(max_length=64)
    author_detail = models.OneToOneField(to='AuthorDetail')

"""作者详情表"""

python 复制代码
class AuthorDetail(models.Model):
    phone = models.CharField(max_length=64)
    email = models.CharField(max_length=64)

Django的请求生命周期流程图

"""它可以帮助你们熟练django的一个完整执行流程"""

今日思维导图:

相关推荐
云和数据.ChenGuang34 分钟前
Django 应用安装脚本 – 如何将应用添加到 INSTALLED_APPS 设置中 原创
数据库·django·sqlite
woshilys1 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
Hacker_LaoYi1 小时前
SQL注入的那些面试题总结
数据库·sql
建投数据2 小时前
建投数据与腾讯云数据库TDSQL完成产品兼容性互认证
数据库·腾讯云
Hacker_LaoYi3 小时前
【渗透技术总结】SQL手工注入总结
数据库·sql
岁月变迁呀3 小时前
Redis梳理
数据库·redis·缓存
独行soc3 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍06-基于子查询的SQL注入(Subquery-Based SQL Injection)
数据库·sql·安全·web安全·漏洞挖掘·hw
梧桐树04293 小时前
python常用内建模块:collections
python
Dream_Snowar4 小时前
速通Python 第三节
开发语言·python
你的微笑,乱了夏天4 小时前
linux centos 7 安装 mongodb7
数据库·mongodb