IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django 01 :初识Django (附案例:用户管理) -> 正文阅读

[Python知识库]Django 01 :初识Django (附案例:用户管理)

一、安装django

pip install django

这里我使用的是Django 3.2.6

二、创建项目

移动到相应的路径,在终端执行以下指令,会创建一些默认的文件和默认的文件夹:

django-admin startproject demosite

让我们看看 startproject 创建了些什么:

mysite/
    manage.py
    mysite/
        __init__.py
        settings.py
        urls.py
        asgi.py
        wsgi.py

这些目录和文件的用处是:

  • 最外层的 mysite/ 根目录只是你项目的容器, 根目录名称对 Django 没有影响,你可以将它重命名为任何你喜欢的名称。

  • manage.py: 一个让你用各种方式管理 Django 项目的命令行工具。你可以阅读 django-admin 和 manage.py 获取所有 manage.py 的细节。

  • 里面一层的 mysite/ 目录包含你的项目,它是一个纯 Python 包。它的名字就是当你引用它内部任何东西时需要用到的 Python 包名。 (比如 mysite.urls).

  • mysite/__init__.py:一个空文件,告诉 Python 这个目录应该被认为是一个 Python 包。如果你是 Python 初学者,阅读官方文档中的 更多关于包的知识

  • mysite/settings.py:Django 项目的配置文件。如果你想知道这个文件是如何工作的,请查看 Django 配置 了解细节。

  • mysite/urls.py:Django 项目的 URL 声明,就像你网站的“目录”。阅读 URL调度器 文档来获取更多关于 URL 的内容。

  • mysite/asgi.py:作为你的项目的运行在 ASGI 兼容的 Web 服务器上的入口。阅读 如何使用 ASGI 来部署 了解更多细节。

  • mysite/wsgi.py:作为你的项目的运行在 WSGI 兼容的Web服务器上的入口。阅读 如何使用 WSGI 进行部署 了解更多细节。

简而言之:

默认项目的文件介绍

mysite
├── manage.py         【项目的管理,启动项目、创建app、数据管理】【不要动】【***常常用***】
└── mysite
    ├── __init__.py
    ├── settings.py    【项目配置】          【***常常修改***】
    ├── urls.py        【URL和函数的对应关系】【***常常修改***】
    ├── asgi.py        【接收网络请求】【不要动】
    └── wsgi.py        【接收网络请求】【不要动】

特殊说明:

创建Django项目实际上有两种方式

  • 命令行,创建的项目是标准的。

  • pycharm,在标准的基础上默认给咱们加了点东西。(本文不介绍)

    • 创建了一个templates目录【删除】

    • settings.py中【删除】

三、创建app

python manage.py startapp app01

文件说明:

- 项目
  - app,用户管理【表结构、函数、HTML模板、CSS】
  - app,订单管理【表结构、函数、HTML模板、CSS】
  - app,后台管理【表结构、函数、HTML模板、CSS】
  - app,网站   【表结构、函数、HTML模板、CSS】
  - app,API    【表结构、函数、HTML模板、CSS】
    ..

注意:我们开发比较简洁,用不到多app,一般情况下,项目下创建1个app即可。
├── app01
│   ├── __init__.py
│   ├── admin.py         【固定,不用动】django默认提供了admin后台管理。
│   ├── apps.py          【固定,不用动】app启动类
│   ├── migrations       【固定,不用动】数据库变更记录
│   │   └── __init__.py
│   ├── models.py        【**重要**】,对数据库操作。
│   ├── tests.py         【固定,不用动】单元测试
│   └── views.py         【**重要**】,函数。
├── manage.py
└── mysite2
    ├── __init__.py
    ├── asgi.py
    ├── settings.py
    ├── urls.py          【URL->函数】
    └── wsgi.py

四、快速上手

4.1、快速体验

  • 注册app(settings.py)
  • 编写URL与视图函数的对应关系(urls.py)
  • 编写视图函数(views.py)
  • 启动django项目

(1)之前我们创建了app,使用前先注册

请添加图片描述

将之添加入settings.py

请添加图片描述

(2)编写URL与视图函数的对应关系(urls.py)

请添加图片描述

settings.py

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


urlpatterns = [
    # path('admin/', admin.site.urls),
    # 在'admin/'这个url下 ==》 执行函数
    path('admin/', views.index),
]

(3)编写视图函数(views.py)

请添加图片描述

app01/views.py

from django.shortcuts import render, HttpResponse


# Create your views here.
def index(request):
    return HttpResponse("Hello World")

(4)启动django项目

两种方法:

  1. 命令行模式

    python manage.py runserver
    
  2. PyCharm打开

    (如果该项目是由PyCharm创建的,左上角会有个开始按钮)

127.0.0.1:8000/admin/

请添加图片描述

注意别访问成了:http://127.0.0.1:8000/

请添加图片描述

提示你我们只创建了 127.0.0.1:8000/admin/

4.2、templates模板

4.1中我们返回了一个”Hello World“,那么如何返回一个HTML文件呢?

(1)创建HTML文件

在app01下创建目录templates,里面存放HTML文件

请添加图片描述

user_list.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户列表</title>
</head>
<body>
    <h1> hello </h1>
{#    <img src="/static/img/1.jpg" alt="">#}
</body>
</html>

(2)编写函数

demosite/app01/views.py

from django.shortcuts import render, HttpResponse


# Create your views here.
def index(request):
    return HttpResponse("Hello World")


def user_list(request):
    """
    关于user_list.html的查找:
        1、优先去主目录下的templates查找
        2、根据app的注册顺序,逐一去每个app下的templates下查找
    """
    return render(request, "user_list.html")

(3)效果展示

请添加图片描述

请添加图片描述

4.3、静态文件

开发中,一般将

  • image
  • css
  • js

做静态文件

(1)存放格式

请添加图片描述
在这里插入图片描述

引用静态文件两种方法:

1、直接用路径就好了

2、修改配置文件(推荐)

(2)引入jquery与bootstrap

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kqXho3ZH-1644861932202)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214151219521.png)]

(1)找网址

jQuery官网经常打不开,这里提供一个网址::jQuery

找到要下载的版本,点击下载

(2)百度网盘

  • 链接:https://pan.baidu.com/s/1QmzgWtihzr1CH6zUV2CmNA
    提取码:1234

五、Django模板语法

5.1、示例效果

views.py

def tql(request):
    name = "DLNovice"
    return render(request, "tql.html", {"n1": name})

tql.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Coder</title>
</head>
<body>
<h1> 模板语法的学习 </h1>
<div>{{ n1 }}</div>

</body>
</html>

演示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5fb2qwTR-1644861932202)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214150820494.png)]

更多变量类型,如字典,参考菜鸟教程:Django 模板 | 菜鸟教程 (runoob.com)

5.2、概念

本质上:在HTML中写一些占位符,由数据对这些占位符进行替换和处理。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZTBGuLsj-1644861932203)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220215014849478.png)]

5.3、案例:伪联通新闻中心

请添加图片描述

六、请求和响应

6.1、三个请求与三个响应

三个请求与三个响应

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5Y4mdSV9-1644861932208)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220215013757759.png)]

关于重定向:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cMTD2wWk-1644861932209)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220215013834497.png)]

6.2、案例:用户登录

我们做个简单案例,输入账号密码,返回“登录成功”

urls.py

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


urlpatterns = [
    path("login/", views.login),
]

app01/views.py

from django.shortcuts import render, HttpResponse


def login(request):
    if request.method == "GET":
        return render(request, "login.html")
    else:
        return HttpResponse("登录成功")

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户登录</title>
</head>
<body>
<h1> 用户登录 </h1>
<form method="post" action="/login/">
    <input type="text" name="user" placeholder="用户名">
    <input type="password" name="password" placeholder="密码">
    <input type="submit" value="提交">
</form>
</body>
</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Va6lbvZP-1644861932209)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214160330395.png)]

但是你发现,你随便输入数据后提交,报错:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WZAoZ5wc-1644861932209)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214162604986.png)]

其实这个用flask就不会报这个错,但django不行

因为django多了一个机制,你可以理解为多了一层安全机制的效验

解决方案:

在form表单里添加一句:

{% csrf_token %}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BCBQp1Iu-1644861932209)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214160810048.png)]

重启项目后,输入账号密码并提交:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ggLuwNHg-1644861932210)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214161303521.png)]

加点细节

  • 设置账号密码验证(后文中再引入数据库)
  • 账号密码正确:重定向,跳转到其他页面
  • 账号密码错误:提示“账号或密码错误”

views.py

from django.shortcuts import render, HttpResponse, redirect


def login(request):
    if request.method == "GET":
        return render(request, "login.html")
    else:
        # 如果是POST请求,获取用户提交的数据
        # print(request.POST)
        username = request.POST.get("user")
        password = request.POST.get("password")
        if username == "root" and password == "123":
            # 重定向,跳转到CSDN
            return redirect("https://www.csdn.net/")
        else:
            return render(request, "login.html", {"error_msg": "用户名或密码错误"})

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户登录</title>
</head>
<body>
<h1> 用户登录 </h1>
<form method="post" action="/login/">
    {% csrf_token %}
    <input type="text" name="user" placeholder="用户名">
    <input type="password" name="password" placeholder="密码">
    <input type="submit" value="提交"/>
    <span style="color: red;">{{ error_msg }}</span>
</form>
</body>
</html>

效果演示:

  • 输入错误

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t4Eth7FB-1644861932210)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214165117514.png)]

  • 输入正确:跳转到CSDN

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SNzVSfYQ-1644861932210)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214165854865.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eyLrRmt4-1644861932211)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214165905433.png)]

七、数据库操作

  • MySQl数据库 + pymysql

    我们可以使用pymsql这个库操作MySQl数据库

  • 但Django提供了更简单的方案:ORM框架

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-e4Zke4p2-1644861932211)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214170357418.png)]

下面我们使用ORM框架

7.1、安装第三方仓库

pip install mysqlclient

如果安装失败,百度搜索“mysqlclient wheel”,我们直接下载安装包

mysqlclient · PyPI

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kR04JNcT-1644861932211)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214170816501.png)]

7.2、ORM

ORM可以帮我们做两件事:

  • 创建、修改、删除数据库中的表

    不用写SQl语句了,但注意是创建表,但不能帮助创建数据库

  • 操作表中的数据

1、创建数据库

  • 启动MySQL服务
  • 创建数据库

启动mysql

[root@host]# mysql -u root -p   
Enter password:******  # 登录后进入终端

创建数据库

mysql> create database 数据库名字;
Query OK, 1 row affected (0.01 sec)

2、django连接数据库

在settings.py文件中进行配置和修改。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'dj',  # 数据库名称
        'USER': 'root',  # MySQL的账户名
        'PASSWORD': 'xxx',  # MySQL的密码
        'HOST': '127.0.0.1',  # 哪台机器的MySQL,本机就直接用127.0.0.1
        'PORT': 3306,
    }
}

django默认用的数据库是sqlite,现在我们改用mysql

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9zNVBKZq-1644861932211)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214175319820.png)]

3、django操作表

  • 创建表
  • 删除表
  • 修改表

修改app下的models.py

如:

from django.db import models


class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    password = models.CharField(max_length=64)
    age = models.IntegerField()

执行俩命令:

(前提:app已注册)

python manage.py makemigrations

python manage.py migrate

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G3r50BBk-1644861932212)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214193929991.png)]

我们查看一下数据库

  1. 进入数据库 use 数据库名字;
  2. show tables;
  3. desc 表的名字;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1LPm9BT5-1644861932212)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214194647285.png)]

show tabes可以看到生成了一堆表,为啥呢?

  • 我们在settings.py中可以看到django默认注册了许多app,他们依赖许多表

那么我们又想添加表了,或者哪个表不想要了怎么办呢?

更改app下的models.py

  1. 添加表就直接加代码,删除表或删除表中的某个元素就注释掉相应的代码

  2. 每次修改代码,都重新运行一下那俩命令

    python manage.py makemigrations
    python manage.py migrate
    

但是,如果表已存在,它里面很有可能是有数据的,这时候你去修改表,就像一个excel表格,你突然要添加一个列。

这时,运行python manage.py makemigrations时就会给你俩选择:

>>> python manage.py makemigrations
You are trying to add a non-nullable field 'phone' to userinfo without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
 1) Provide a one-off default now (will be set on all existing rows with a null value for this column)
 2) Quit, and let me add a default in models.py
Select an option:
  1. 手动填充
  2. 退出

或者,你在代码里添加默认值(default),如:age = models.IntegerField(default=18)

4、操作表中数据

常用的四大操作:增删改查

  • 添加数据
  • 删除数据
  • 获取数据
  • 修改数据

(1)添加数据

我们在views.py添加一个函数orm()

from django.shortcuts import render, HttpResponse, redirect
from app01.models import Department, UserInfo


def orm(request):
    # 新建数据
    Department.objects.create(title="销售部")
    Department.objects.create(title="运营部")
    Department.objects.create(title="IT部")
    return HttpResponse("数据添加成功")
	# 看到 http://127.0.0.1:8000/orm正常输出"数据添加成功",就说明我们之前的操作运行成功了
  • 然后运行项目python manage.py runserver
  • 并访问 http://127.0.0.1:8000/orm

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-twuUv2op-1644861932212)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214201404915.png)]

这时我们查一下数据库:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4bIIOuQo-1644861932212)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214201538210.png)]

但注意不要重复添加,已添加的数据就注释了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IdN84EQF-1644861932213)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214202838450.png)]

否则就会这样。。。。。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7zImetuJ-1644861932213)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214202028800.png)]

对于需要参数的表,如我们之前设置的UserInfo():

我们修改一下函数

def orm(request):
    # 新建数据
    # Department.objects.create(title="销售部")
    # Department.objects.create(title="运营部")
    # Department.objects.create(title="IT部")
    # Department.objects.create(title="测试部")
    UserInfo.objects.create(name="coder01", password="01", age="18")
    UserInfo.objects.create(name="coder02", password="02", age="19")
    UserInfo.objects.create(name="coder03", password="03", age="20")
    return HttpResponse("数据添加成功")
  • 我们重新访问 http://127.0.0.1:8000/orm
  • 查看数据库,可以看到

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-evNkQHfG-1644861932213)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214203415837.png)]

(2)删除数据

def orm(request):
    # 2、删除数据
    Department.objects.all().delete()  # delete()前的代码可以理解为”条件“,达成条件就删除
    UserInfo.objects.filter(id=3).delete()
    return HttpResponse("数据删除成功")

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zMBPUqPr-1644861932213)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214203849016.png)]

(3)获取数据

def orm(request):
    # 3、获取数据
    # 我们获取的数据时QuerySet类型 data_list = [行,行,行]
    data_list = UserInfo.objects.all()
    for obj in data_list:
        print(obj.id, obj.name, obj.password, obj.age)
    # 获取第一条数据
    first = UserInfo.objects.filter(id=1).first()
    print(first.name, first.password)
    return HttpResponse("数据获取成功")

可以在终端看到:

System check identified no issues (0 silenced).
February 14, 2022 - 20:48:51
Django version 3.2.6, using settings 'demosite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
1 coder01 01 18
2 coder02 02 19
coder01 01
[14/Feb/2022 20:48:55] "GET /orm/ HTTP/1.1" 200 18

(4)修改数据

def orm(request):
	# 4、更新数据
    # UserInfo.objects.all().update(password=999)
    # UserInfo.objects.filter(id=2).update(age=22)
    UserInfo.objects.filter(name="coder02").update(age=22)
    return HttpResponse("数据修改成功")

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UAVMr7Sn-1644861932213)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214205203970.png)]

7.3、案例:用户管理

1、展示用户列表

  • url

  • 函数

    • 获取所有用户信息
    • HTML渲染

views.py

def info_list(request):
    # 1、获取数据库中所有的用户信息
    # [对象,对象,对象]
    data_list = UserInfo.objects.all()
    return render(request, "infolist.html", {"data_list": data_list})

infolist.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户列表</title>
</head>
<body>
<h1> 用户列表 </h1>
<table border="1">
    <thead>
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>密码</th>
            <th>年龄</th>
        </tr>
    </thead>
    <tbody>
    {% for obj in data_list %}
        <tr>
            <th>{{ obj.id }}</th>
            <th>{{ obj.name }}</th>
            <th>{{ obj.password }}</th>
            <th>{{ obj.age }}</th>
        </tr>
    {% endfor %}
    </tbody>
</table>
</body>
</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KOAnAsEy-1644861932214)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214210849988.png)]

2、添加用户

  • url
  • 函数
    • GET,看到页面,输入内容
    • POST,提交 -> 写到数据库

urls.py

path("info/add/", views.info_add)

views.py

from django.shortcuts import render, HttpResponse, redirect
from app01.models import Department, UserInfo


# 用户注册
def info_add(request):
    if request.method == "GET":
        return render(request, "info_add.html")
    # 获取用户提交的数据
    user = request.POST.get("user")
    password = request.POST.get("pwd")
    age = request.POST.get("age")
    # 添加到数据库
    UserInfo.objects.create(name=user, password=password, age=age)
    return redirect("http://127.0.0.1:8000/infolist/")

info_add.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户注册</title>
</head>
<body>
<h1>用户注册</h1>
<form method="post", action="/info/add/">
    {% csrf_token %}  {#不要忘了添加这一句:避免django的那层安全机制的效验#}
    <input type="text" name="user" placeholder="用户名">
    <input type="text" name="pwd" placeholder="密码">
    <input type="text" name="age" placeholder="年龄">
    <input type="submit" value="注册">
</form>
</body>
</html>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4a3usC6o-1644861932214)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214213148338.png)]

然后就直接跳转到我们之前写的:查看用户列表功能

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O4xrGMmM-1644861932214)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214213227100.png)]

小优化:添加跳转功能

我们希望在

用户列表那可以添加按钮”用户注册“,直接跳转到用户注册界面

==》 在展示用户列表的那个HTML文件里加个标签就好了

<a href="http://127.0.0.1:8000/info/add/">用户注册</a>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iFbcXWkE-1644861932214)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214214441131.png)]

在这里插入图片描述

3、删除用户

  • url
  • 函数

我们现在实现一个功能,通过访问url的方式删除用户

将要删除的用户标记在url中

比如:

访问 http://127.0.0.1:8000/info/delete/?nid=1

就删除id=1的用户

效果展示如下:

  • 删除前:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CuGgT4vN-1644861932215)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214215739634.png)]

  • 访问url

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-O7NlbOzL-1644861932215)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214215716407.png)]

  • 查看数据库:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oVMA0i8c-1644861932216)(C:\Users\pc\AppData\Roaming\Typora\typora-user-images\image-20220214215816346.png)]

我们将这个删除用户的功能添加到”展示用户列表“模块

urls.py

path("info/delete/", views.info_delete),

views.py

# 删除用户
def info_delete(request):
    nid = request.GET.get("nid")
    UserInfo.objects.filter(id=nid).delete()
    # 删除后跳转回"用户展示"界面
    return redirect("/infolist/")

infolist.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户列表</title>
</head>
<body>
<h1> 用户列表 </h1>
<table border="1">
    <thead>
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>密码</th>
            <th>年龄</th>
            <th>操作</th>
        </tr>
    </thead>
    <tbody>
    {% for obj in data_list %}
        <tr>
            <th>{{ obj.id }}</th>
            <th>{{ obj.name }}</th>
            <th>{{ obj.password }}</th>
            <th>{{ obj.age }}</th>
            <th>
                <a href="http://127.0.0.1:8000/info/delete/?nid={{ obj.id }}">删除</a>
            </th>
        </tr>
    {% endfor %}
    </tbody>
</table>

<a href="http://127.0.0.1:8000/info/add/">用户注册</a>

</body>
</html>

在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-02-16 13:02:46  更:2022-02-16 13:03:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:46:29-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码