系统架构
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",获取更多最新分享。