python + django 搭建页面---用户管理


前言

提到用户管理之类的,无非就是在数据库增删改查。
假如我们有个表叫web_admin,表结构如下图,我们要对此表增删改查
在这里插入图片描述


一、MySQL中增删改查

我们要对web_admin表进行增删改查(最基本的语句)

指定字段增加一个数据,id是自增的
insert into web_admin(username,password) values ('黑猫警长','giao');
不指定字段,但是值类型和数目要和字段的类型和数目匹配
insert into web_admin values ('4','黑猫','black');

删除指定字段
delete from web_admin where id=4;

查找指定字段
select username from web_admin;

更新指定字段
update web_admin set username='小可爱' where id=3;

二、django ORM中对MySQL的增删改查

1.什么是ORM

ORM : 全称 object relational mapping, 对象关系映射
功能 : 通过orm实现使用操作对象的方式来操作数据库中的数据
目的 : 就是为了能够让不懂SQL语句的人通过python面向对象的知识点也能够轻松自如的操作数据库

比如我们之前用models中的类创建表,从表中拿出用户名密码和前端数据比较,都是用的orm操作的数据库。

2.获取和创建数据

models.Admin.objects.all() 获取Admin表中的所有数据对象
models.Admin.objects.create(username='露露',password='123') 创建一行数据

在urls.py添加一个路径到函数的映射

    path('orm/', views.orm),

views.py中添加orm函数

from django.shortcuts import HttpResponse
from web import models

def orm(request):
    # 检索出web_admin表中所有数据  
    data = models.Admin.objects.all()
    # 输出<QuerySet [<Admin: Admin object (1)>, <Admin: Admin object (2)>, <Admin: Admin object (3)>]>
    print(data) 
    return HttpResponse('成功')

然后在网页上访问 http://127.0.0.1:8000/orm/ 命令行就会返回函数中的data值
在这里插入图片描述数据表中只有三条数据,data值是一个QuerySet 中包含了一个列表,列表中就是返回的三条数据对象,直接用"."加数据表字段就可以取到值。
现在我们更改orm函数的内容

from web import models
def orm(request):
    # 检索出web_admin表中所有数据  
    data = models.Admin.objects.all()
    for admin in data:
        print(admin.username,admin.password)
        # 输出数据表中内容
        # giao 0000
        # jing 1111
        # 小可爱 giao

    return HttpResponse('成功')

在这里插入图片描述到现在为止只是从数据库中获取值。

3.查找数据

from web import models
def orm(request):

    1.查找后依然返回一个QuerySet对象,列表中只有一个查找到的数据对象
    data = models.Admin.objects.filter(id=1)
    print(data) # <QuerySet [<Admin: Admin object (1)>]>

    2.first()函数把列表中的第一个数据对象取出来了
    data_first = models.Admin.objects.filter(id=1).first()
    print(data_first) # Admin object (1)

    3.字段名加__contains查找片段,返回一个QuerySet对象,列表中是所有包含该片段的数据对象
    contains = models.Admin.objects.filter(username__contains='可爱')
    print(contains) # <QuerySet [<Admin: Admin object (3)>]>

    4.判断是否存在
    exists = models.Admin.objects.filter(username='小可爱',password='giao').exists()

    5.4相同效果
    dict_admin = {
    'username':'小可爱',
    'password':'giao',
    }
    exists = models.Admin.objects.filter(**dict_admin).exists()
    print(exists) # True

    6.排除指定字段后搜索,搜索值为空时相当于all()
    exclude = models.Admin.objects.exclude(id=1).filter()
    print(exclude) # <QuerySet [<Admin: Admin object (2)>, <Admin: Admin object (3)>]>

    return HttpResponse('成功')

4.删除和更新数据

更新数据都是对<QuerySet [<Admin: Admin object (3)>]> 类型的数据进行操作,但是要确保其中列表中只有一条数据对象(对表中不重复的字段进行检索,比如本文中的id),否则你就会更新多个数据。
删除数据对<QuerySet [<Admin: Admin object (3)>]> 和<Admin: Admin object (3)>都可以操作

#所有username更新为露露
models.Admin.objects.filter().update(username='露露') 
#id=3的username更新为露露
models.Admin.objects.filter(id=3).update(username='露露') 
#会报错  'Admin' object has no attribute 'update'
错误写法:   models.Admin.objects.filter(id=3).first().update(username='露露')  




#删除所有数据
models.Admin.objects.filter().delete()
#删除id=3的数据
models.Admin.objects.filter(id=3).delete()
#删除username='露露'的所有数据
models.Admin.objects.filter(username='露露').delete()
#删除username='露露'的最靠前的一条数据
models.Admin.objects.filter(username='露露').first().delete()

5.创建用户管理页面

我们直接用web_admin表中的数据来创建用户管理页面。
先说一说思路,我们尽量把各个功能做成单独的页面。
1,页面要显示用户的名字和密码,我们应该创建一个“user/list/”链接来访问,创建一个user_list函数并返回一个user_list.html的页面。
2,应该有添加用户的页面,创建一个“user/add/”链接访问,再创建一个user_add函数并返回一个user_add.html的页面。
3,接着添加一个用户编辑页面,用’user/edit/'链接访问,对应要有一个函数user_edit来返回user_edit.html页面,但是需要提供id
4,用户删除页面其实是不用存在的,点删除时一定会调用一个函数完成删除操作,因此要有对应链接来调用删除函数,也需要提供id。

修改urls.py
edit和delete页面传入的nid其实是用户表中的id,无论编辑和删除都需要一行数据的唯一标识,就是id

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

from web import views

urlpatterns = [
    # path('admin/', admin.site.urls),
    path('login/', views.login),
    path('image/code/', views.img_code),
    path('orm/', views.orm),

    #用户管理 添加四个对应数据
	path('user/list/',views.user_list),
    path('user/add/',views.user_add),
    path('user/edit/<int:nid>/',views.user_edit),  #传入的nid其实是用户表中的id,无论编辑和删除都需要一行数据的唯一标识,就是id
    path('user/delete/<int:nid>/',views.user_delete),

]

修改views.py


# 用户管理
def user_list(request):
    # 用orm方式从web_admin表中获取数据
    data_list = models.Admin.objects.all()
    # 直接把数据返回到user_list.html中
    return render(request, 'user_list.html',{'data':data_list})

def user_add(request):
    # 请求方式为get,返回添加页面
    if request.method == "GET":
        return render(request, 'user_add.html')
    # 请求方式为post,先获得表单中提交的值
    name = request.POST.get('username')
    pwd = request.POST.get('password')
    # 把获取到的值传到数据库中
    models.Admin.objects.create(username=name,password=pwd)
    # 重定向到/user/list/,返回user_list.html
    return redirect('/user/list/')

def user_edit(request,nid):
    # 请求方式为get,返回编辑页面
    if request.method == "GET":
        return render(request, 'user_edit.html')
    # 请求方式为post,先获得表单中提交的值
    name = request.POST.get('username')
    pwd = request.POST.get('password')
    # 获得目标id查找出来的数据并更新
    models.Admin.objects.filter(id=nid).update(username=name,password=pwd)
    return redirect('/user/list/')

def user_delete(request,nid):
    # 拿到id直接删除
    models.Admin.objects.filter(id=nid).delete()
    return redirect('/user/list/')


添加页面
user_list.html

<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>

<div>
  <div>数据列表</div>
  <div>
        <a href="/user/add/">添加</a>
  </div>

    <table >
      <tbody>
        {% for admin in data %}
        <tr>
          <!-- <th scope="row">1</th> -->
          <td>{{admin.id}}</td>
          <td>{{admin.username}}</td>
          <td>{{admin.password}}</td>
          <td>
              <a href="/user/edit/{{admin.id}}/">编辑</a>
              <a href="/user/delete/{{admin.id}}">删除</a>
          </td>
        </tr>
        {% endfor %}
      </tbody>
    </table>
</div>
</body>
</html>

user_add.html

<!DOCTYPE html>
<html>
<head>
  <title></title>
</head>
<body>

  <div>
    <div >添加用户</div>
    <div >
      <form method="post">
          {% csrf_token %}
            <div>
              <label>用户名</label>
              <input name="username">
            </div>
            <div>
              <label>密码</label>
              <input name="password">
            </div>
          <button type="submit">添 加</button>
      </form>
    </div>
  </div>


</body>
</html>

user_edit.html

<!DOCTYPE html>
<html>
<head>
  <title></title>
</head>
<body>

  <div>
    <div >编辑用户</div>
    <div >
      <form method="post">
          {% csrf_token %}
            <div>
              <label>用户名</label>
              <input name="username">
            </div>
            <div>
              <label>密码</label>
              <input name="password">
            </div>
          <button type="submit">编 辑</button>
      </form>
    </div>
  </div>


</body>
</html>

python manage.py runserver 启动网站
运行效果图
在这里插入图片描述在这里插入图片描述在这里插入图片描述

总结

由于之前只有一个登录页面,不能进行用户认证的演示,现在写完用户管理页面后可以进行用户认证的添加,访问每个页面都会携带着登录信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值