Django ORM 实现数据的单表 增删改查

一、配置环境


1 Django 连接数据库(MySQL)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'xyz',
        'USER':'root',
        'PASSWORD':'root',
        'HOST':'IP地址',
        'PORT':3306,
        'CHARSET':'utf8'
    }
}

2 Django 默认用的是 mysqldb 改为用 pymysql 连接

import pymysql
pymysql.install_as_MySQLdb()

3 安装 pymysql

pip3 install pymysql

4 定义 models

from django.db import models

# Create your models here.

class User(models.Model):
    # id int primary_key auto_increment
    id = models.AutoField(primary_key=True, verbose_name='主键')
    # username varchar(32)
    username = models.CharField(max_length=32, verbose_name='用户名')
    password = models.CharField(max_length=64, verbose_name='密码')

5 执行迁移,同步。顺序执行下面个代码(每次修改表都要顺序执行一遍)

python manage.py makemigrations
python manage.py migrate

6 定义 url

from django.contrib import admin
from django.urls import path
from app import views

urlpatterns = [
    path('admin/', admin.site.urls),
    # 注册功能
    path('register/',views.reg),
    # 展示用户列表
    path('userlist/',views.userlist),
    # 编辑用户
    path('edit_user/',views.edit_user),
    # 删除用户
    path('delete_user/',views.delete_user)
]

 

二、增加


新建 templates\register.html 文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<h1 class="text-center">注册</h1>
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <form action="" method="post">
                <p>username:<input type="text"     name="username" class="form-control"></p>
                <p>password:<input type="password" name="password" class="form-control"></p>
                <input type="submit" class="btn btn-danger btn-block">
            </form>
        </div>
    </div>
</div>
</body>
</html>

获取用户数据,并存入数据库

from django.shortcuts import HttpResponse, render, redirect
from app import models

def register(request):
    if request.method == "POST":
        username = request.POST.get('username')
        password = request.POST.get('password')
       
        # 第一种增加
        # res = models.User.objects.create(username=username, password=password)
        # 返回值就是当前被创建的对象本身
        # print(res,res.username, res.password)

        # 第二种增加
        user_obj = models.User(username = username, password = password)
        # 保存数据
        user_obj.save()  
        
    # 先给用户返回一个注册页面
    return render(request, 'register.html')

 

三、查询


def userlist(request):
    # 查询出用户表里面所有的数据
    # 方式1
    # filter括号内可以携带多个参数 参数与参数之间默认是and关系。可以把filter 想成where
    # data = models.User.objects.filter()
    # print(data)

    # 方式2
    user = models.User.objects.all()
    # return render(request,'userlist.html', {'user_queryset':user_queryset})

    return render(request, 'userlist.html', locals())

新建 templates\userlist.html 文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<h1 class="text-center">数据展示</h1>
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <table class="table table-striped table-hover">
                <thead>
                    <tr>
                        <th>ID</th>
                        <th>username</th>
                        <th>password</th>
                        <th>action</th>
                    </tr>
                </thead>
                <tbody>
                    {% for user_obj in user %}
                        <tr>
                            <td>{{ user_obj.id }}</td>
                            <td>{{ user_obj.username }}</td>
                            <td>{{ user_obj.password }}</td>
                            <td>
                                <a href="/edit_user/?user_id={{ user_obj.id }}"   class="btn btn-primary btn-xs">编辑</a>
                                <a href="/delete_user/?user_id={{ user_obj.id }}" class="btn btn-danger btn-xs">删除</a>
                            </td>
                        </tr>
                    {% endfor %}
                </tbody>
            </table>
        </div>
    </div>
</div>
</body>
</html>

 

四、修改


def edit_user(request):    # 获取url问号后面的参数    edit_id = request.GET.get('user_id')    # 查询当前用户想要编辑的数据对象    edit_obj = models.User.objects.filter(id = edit_id).first()    if request.method == "POST":        username = request.POST.get('username')        password = request.POST.get('password')        # 去数据库中修改对应的数据内容        # 修改数据方式1        # models.User.objects.filter(id=edit_id).update(username=username,password=password)        """            将filter查询出来的列表中所有的对象全部更新            批量更新操作            只修改被修改的字段        """        # 修改数据方式2        edit_obj.username = username        edit_obj.password = password        edit_obj.save()        """            上述方法当字段特别多的时候效率会非常的低            从头到尾将数据的所有字段全部更新一边 无论该字段是否被修改        """        # 跳转到数据的展示页面        return redirect('/userlist/')    # 将数据对象展示到页面上    return render(request, 'edit_user.html', locals())

 新建 templates\edit_user.html 文件

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
    <script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdn.bootcss.com/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>

<h1 class="text-center">编辑</h1>
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <form action="" method="post">
                <p>username:<input type="text" name="username" class="form-control" value="{{ edit_obj.username }}"></p>
                <p>password:<input type="text" name="password" class="form-control" value="{{ edit_obj.password }}"></p>
                <input type="submit" class="btn btn-info btn-block" value="编辑">
            </form>
        </div>
    </div>
</div>
</body>
</html>

 

五、删除


def delete_user(request):
    # 获取用户要删除的数据 id值
    delete_id = request.GET.get('user_id')
    # 直接去数据库中找到对应的数据删除即可
    models.User.objects.filter(id = delete_id).delete()
    # 跳转到展示页面
    return redirect('/userlist/')

 

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django ORM 实现数据的单表 增删改查 - Python技术站

(0)
上一篇 2023年4月2日
下一篇 2023年4月2日

相关文章

  • Django request对象

    request对象       request.method         # 获取当前的请求方式,并且返回的是全大写的字符串 print(request.POST.get(‘hobby’))   # 只能接收最后一个 print(request.POST.getlist(‘hobby’))  # 接收多个 request.GET.get(‘name’) …

    Python开发 2023年4月2日
    00
  • Django 静态文件配置

    一、静态文件配置 在 settings.py 文件的最后添加 # settings.py # Static files (CSS, JavaScript, Images) # https://docs.djangoproject.com/en/4.1/howto/static-files/ # STATIC SETTINGS STATIC_URL = ‘/s…

    2023年4月2日
    00
  • Django 之必知必会三板斧

    一、HttpResponse 在django.http 模块中定义了HttpResponse 对象的API,HttpRequest 对象由Django 自动创建,不调用模板,直接返回数据。 1 在 app/views.py 中导入模块,添加对应的函数 from django.shortcuts import HttpResponse, render, red…

    2023年4月2日
    00
  • Django 使用VScode 创建工程

    一、VSCode 创建Django 工程 1 地址 https://code.visualstudio.com 2 mysite(项目名),创建Django 项目,可以和虚拟环境放在同一目录,也可以放在虚拟环境的文件夹里。 django-admin startproject mysite 3 新建文件夹–>搭建虚拟环境,新建一个项目文件夹 mysit…

    2023年4月2日
    00
  • Django ORM 实现数据的多表 增删改查

    一、创建模型和表 假定下面这些概念、字段与关系: 作者模型:一个作者有姓名和年龄。 作者详细模型:把作者的详情放到详情表,手机号,家庭住址信息。 作者详情模型 和 作者模型之间是一对一的关系(one-to-one)。 出版社模型:出版社有名称,所在城市以及email。 书籍模型: 书籍有书名和价格、出版日期。 一本书可能会有多个作者,一个作者也可以写多本书,…

    Python开发 2023年4月2日
    00
  • Django 简介和版本介绍

    一、简介 官方地址:https://www.djangoproject.com Django 是一个由Python 编写的具有完整架站能力的开源Web框架。使用 Django,只要很少的代码,开发人员就可以轻松地完成一个正式网站所需要的大部分内容,并进一步开发出全功能的Web服务。 Django 本身基于MVC 架构,即Model(模型)+View(视图)+…

    2023年4月2日
    00
  • Django 使用cmd 创建工程

    一、Django 安装 1 通过pip安装 Django 如果你是通过升级的方式安装Django,那么你需要先卸载旧的版本。 Django 提供3种发行版本,推荐使用官方的稳定版本: 你的操作系统提供的发行版本(Linux) 官方稳定版本(推荐) 开发测试版本 Django 本质上是Python 语言的一个类库,因此可以通过pip 工具安装。这也是最简便、最…

    2023年4月2日
    00
  • Django 聚合查询 分组查询 F与Q查询

    一、聚合查询 需要导入模块:from django.db.models import Max, Min, Sum, Count, Avg 关键语法:aggregate(聚合结果别名 = 聚合函数(参数)) 查询结果:使用聚合函数,从每一个组中获取结果:字典 注意点: 1 聚合函数必须在分组之后才能使用 2 没有分组,即默认整体就是一组 3 查询结果为 普通字…

    Python开发 2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部