权限管理系统-05-3-django数据库增删改查

系统架构

系统架构

Django数据库增删改查

一旦创建 数据模型 后,Django 自动给予你一套数据库抽象 API,允许你创建,检索,更新和删除对象。

官方文档 https://docs.djangoproject.com/zh-hans/4.2/topics/db/queries/

filter(**kwargs)
返回一个新的 QuerySet,包含的对象满足给定查询参数。
exclude(**kwargs)
返回一个新的 QuerySet,包含的对象 不 满足给定查询参数。
get()
检索单个对象

  • 查询多个
(venv) PS D:\pycode\yfidmgrdev> python manage.py shell
Python 3.9.9 (tags/v3.9.9:ccb0e6a, Nov 15 2021, 18:08:50) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)                                                                          
>>> from yfidmgr.models import Permissions
>>> users = Permissions.objects.all()
>>> print(users)
<QuerySet [<Permissions: Permissions object (9)>, <Permissions: Permissions object (10)>, <Permissions: Permissions object (11)>, <Permissions: Permissions object (12)>]>
>>> for user in users:
...   print("name:" + user.name) 
... 
name:小明
name:李华
name:小红
name:admin


>>> users = Permissions.objects.exclude(name="小红") 
>>> for user in users: 
...   print(user.name)                                
... 
小明
李华
admin

  • 查询单个
>>> user = Permissions.objects.get(name="小红")         
>>> print(user.name) 
小红

>>> user = Permissions.objects.filter(name="小红") 
>>> user.get().name                                 
'小红'


为了用 Python 对象展示数据表对象,Django 使用了一套直观的系统:一个模型类代表一张数据表,一个模型类的实例代表数据库表中的一行记录。
要创建一个对象,用关键字参数初始化它,然后调用 save() 将其存入数据库。

>>> from yfidmgr.models import Permissions
>>> from django.utils import timezone
>>> userinfo = Permissions(createdTime=timezone.now(),displayName="小蓝",uid='',name="小蓝",email="",affiliation='',zoom='',update_at=timezone.now(),wecom='""',properties='{}',ranking=999,signupApplication='',yandex='', yammer='',yahoo='',xero='',wepay='',vk='',uber='',typetalk='',twitter='',twitch='',tumblr='',tiktok='', stripe='',strava='',spotify='',soundcloud='',type='normal-user')
>>> userinfo.save() 
# 查询小蓝
>>> userinfo.name
'小蓝'

>>> users = Permissions.objects.all()
>>> for user in users:
...    print("name:" + user.name) 
... 
name:小蓝
name:小明
name:李华
name:小红
name:admin

删除方法方便地被命名为 delete()。这个方法立即删除对象并返回被删除的对象数以及一个包含每种对象类型的删除数的字典。通过调用实例的delete方法删除,但是删除后还会存在内存中,save后恢复。

>>> user = Permissions.objects.get(name="小蓝")  
>>> print(user.name)                            
小蓝
>>> user.delete()    
(1, {'yfidmgr.Permissions': 1})

要将修改保存至数据库中已有的某个对象,使用 save()。
这在幕后执行了 UPDATE SQL 语句。Django 在你显示调用 save() 后才操作数据库。

>>> user = Permissions.objects.get(name="小蓝")
>>> user.name = "小黄" 
>>> user.save()                                 
>>> users = Permissions.objects.all()
>>> for user in users:
...   print("name:" + user.name)
...
name:小明
name:李华
name:admin
name:小红
name:小黄

权限管理系统-增删改部分

# yfidmgrdev/yfidmgr/getusers.py
# .yfid_api查看权限管理系统-03-3-casdoor接口
from django.utils import timezone
from .models import Permissions
from .yfid_api import get_user, get_users, update_user, add_user, delete_user
import json
from pathlib import Path
from pypinyin import pinyin, Style
import uuid
from django.db.models import Max

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent



def update_one_user(id):
    # 发送 API 请求并获取响应数据
    user_all_info = Permissions.objects.get(id=id)
    # print(user_all_info, "++++++++++++")
    name = user_all_info.name
    # print(name, "++++++++++++")
    filename = BASE_DIR / 'usermgr/yfid_json/yfid_user.json'
    with open(filename, 'r', encoding='utf-8') as f:
        data = json.load(f)

    data['createdTime'] = user_all_info.createdTime
    data['displayName'] = user_all_info.displayName
    data['wecom'] = user_all_info.wecom
    data['id'] = user_all_info.uid
    data['properties'] = user_all_info.properties
    data['signupApplication'] = user_all_info.signupApplication
    data['name'] = user_all_info.name
    data['email'] = user_all_info.email
    data['affiliation'] = user_all_info.affiliation
    data['zoom'] = user_all_info.zoom
    data['yandex'] = user_all_info.yandex
    data['yammer'] = user_all_info.yammer
    data['yahoo'] = user_all_info.yahoo
    data['xero'] = user_all_info.xero
    data['wepay'] = user_all_info.wepay
    data['vk'] = user_all_info.vk
    data['uber'] = user_all_info.uber
    data['typetalk'] = user_all_info.typetalk
    data['twitter'] = user_all_info.twitter
    data['twitch'] = user_all_info.twitch
    data['tumblr'] = user_all_info.tumblr
    data['tiktok'] = user_all_info.tiktok
    data['stripe'] = user_all_info.stripe
    data['strava'] = user_all_info.strava
    data['spotify'] = user_all_info.spotify
    data['soundcloud'] = user_all_info.soundcloud

    data = json.dumps(data, ensure_ascii=False)
    data = data.replace("\"{'", "{'")
    data = data.replace("'}\"", "'}")
    data = data.replace("'", "\"")
    data = data.replace("\"{", "{")
    data = data.replace("}\"", "}")
    # 打开文件
    with open(BASE_DIR / 'usermgr/yfid_json/yfid_user_tmp.json', "w", encoding="utf-8") as file:
        # 将数据写入文件
        file.write(data)
    return update_user(name)


def add_one_user(name, email, ip, system, m10116_ports, m10030_ports):
    while True:
        uid = create_uuid()
        if not Permissions.objects.filter(uid=uid).exists():
            break
    max_id = Permissions.objects.aggregate(max_id=Max('id'))['max_id']
    # 先在数据库添加数据
    Permissions.objects.create(
        createdTime=timezone.now(),
        displayName=name,
        uid=uid,
        name=name,
        email=email,
        affiliation=ip,
        zoom=system,
        update_at=timezone.now(),
        wecom='""',
        properties='{}',
        ranking=max_id,
        signupApplication='app-built-in',
        yandex=m10116_ports,
        yammer=m10030_ports,
        yahoo='',
        xero='',
        wepay='',
        vk='',
        uber='',
        typetalk='',
        twitter='',
        twitch='',
        tumblr='',
        tiktok='',
        stripe='',
        strava='',
        spotify='',
        soundcloud='',
        type='normal-user',
    )

    # 再从数据库中查出当前用户的所有信息
    user_all_info = Permissions.objects.get(name=name)

    filename = BASE_DIR / 'usermgr/yfid_json/yfid_user.json'
    with open(filename, 'r', encoding='utf-8') as f:
        data = json.load(f)
    data['createdTime'] = user_all_info.createdTime
    data['displayName'] = user_all_info.displayName
    data['wecom'] = user_all_info.wecom
    data['id'] = user_all_info.uid
    data['properties'] = user_all_info.properties
    data['signupApplication'] = user_all_info.signupApplication
    data['name'] = user_all_info.name
    data['email'] = user_all_info.email
    data['affiliation'] = user_all_info.affiliation
    data['zoom'] = user_all_info.zoom
    data['yandex'] = user_all_info.yandex
    data['yammer'] = user_all_info.yammer
    data['yahoo'] = user_all_info.yahoo
    data['xero'] = user_all_info.xero
    data['wepay'] = user_all_info.wepay
    data['vk'] = user_all_info.vk
    data['uber'] = user_all_info.uber
    data['typetalk'] = user_all_info.typetalk
    data['twitter'] = user_all_info.twitter
    data['twitch'] = user_all_info.twitch
    data['tumblr'] = user_all_info.tumblr
    data['tiktok'] = user_all_info.tiktok
    data['stripe'] = user_all_info.stripe
    data['strava'] = user_all_info.strava
    data['spotify'] = user_all_info.spotify
    data['soundcloud'] = user_all_info.soundcloud

    data = json.dumps(data, ensure_ascii=False)
    data = data.replace("\"{'", "{'")
    data = data.replace("'}\"", "'}")
    data = data.replace("'", "\"")
    data = data.replace("\"{", "{")
    data = data.replace("}\"", "}")
    # 打开文件
    with open(BASE_DIR / 'usermgr/yfid_json/yfid_add_user_tmp.json', "w", encoding="utf-8") as file:
        # 将数据写入文件
        file.write(data)
    return add_user()


def delete_one_user(id):
    # 先获取当前用户信息
    user_all_info = Permissions.objects.get(id__exact=id)
    # 在数据库中删除当前用户信息
    Permissions.objects.get(id__exact=id).delete()
    filename = BASE_DIR / 'usermgr/yfid_json/yfid_user.json'
    with open(filename, 'r', encoding='utf-8') as f:
        data = json.load(f)
    data['createdTime'] = user_all_info.createdTime
    data['displayName'] = user_all_info.displayName
    data['wecom'] = user_all_info.wecom
    data['id'] = user_all_info.uid
    data['properties'] = user_all_info.properties
    data['signupApplication'] = user_all_info.signupApplication
    data['name'] = user_all_info.name
    data['email'] = user_all_info.email
    data['affiliation'] = user_all_info.affiliation
    data['zoom'] = user_all_info.zoom
    data['yandex'] = user_all_info.yandex
    data['yammer'] = user_all_info.yammer
    data['yahoo'] = user_all_info.yahoo
    data['xero'] = user_all_info.xero
    data['wepay'] = user_all_info.wepay
    data['vk'] = user_all_info.vk
    data['uber'] = user_all_info.uber
    data['typetalk'] = user_all_info.typetalk
    data['twitter'] = user_all_info.twitter
    data['twitch'] = user_all_info.twitch
    data['tumblr'] = user_all_info.tumblr
    data['tiktok'] = user_all_info.tiktok
    data['stripe'] = user_all_info.stripe
    data['strava'] = user_all_info.strava
    data['spotify'] = user_all_info.spotify
    data['soundcloud'] = user_all_info.soundcloud

    data = json.dumps(data, ensure_ascii=False)
    data = data.replace("\"{'", "{'")
    data = data.replace("'}\"", "'}")
    data = data.replace("'", "\"")
    data = data.replace("\"{", "{")
    data = data.replace("}\"", "}")
    # 打开文件
    with open(BASE_DIR / 'usermgr/yfid_json/yfid_delete_user_tmp.json', "w", encoding="utf-8") as file:
        # 将数据写入文件
        file.write(data)
    response = delete_user()
    return True

GZH

  • 欢迎关注同名GZH"小红帽rh",获取更多最新分享。
  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值