Python3项目初始化2-->用户删除和编辑
Python3项目初始化2-->用户删除和编辑
8、用户删除
当前用户是:{{ request.session.user.name }}
index.html里面新增如下内容,
当前登录用户是:{{ request.session.user.name }}, <a href="/user/logout/">退出
这里需要model.py里面返回,故model.py里面做调整。
from django.db import models import json DATA_FILE = 'user.data.json' def get_users(): fhandler = open(DATA_FILE, 'rt') users = json.loads(fhandler.read()) fhandler.close() return users def valid_login(name, password): users = get_users() for uid, user in users.items(): if user['name'] == name and user['password'] == password: user['id'] = uid #记录uid信息 return user # True-->user return None
首页设置位置,编辑和删除(这里的判断是说不能删除用户自己,uid参数)页面。
<th>联系方式</th>
<th>操作</th
{% for uid, user in users.items %}
<td>{{ user.tel }}</td>
<td>
<a href="{% url 'user:view' %}?uid={{ uid }}">编辑</a>
{% if request.session.user.id != uid %}
<a href="{% url 'user:delete' %}?uid={{ uid }}">删除</a>
{% endif %}
</td>
添加url信息,
path('delete/', views.delete, name='delete'),
path('view/', views.view, name='view'),
配置视图信息,
from .models import valid_login as valid_login_func, delete_user, get_user
def delete(request):
if not request.session.get('user'):
return redirect('user:login')
uid = request.GET.get('uid', '')
if uid.isdigit():
delete_user(uid)
return redirect('user:index')
配置model
def dump_users(users):
fhandler = open(DATA_FILE, 'wt')
fhandler.write(json.dumps(users))
fhandler.close()
return True
def delete_user(uid):
users = get_users()
users.pop(uid, None)
dump_users(users)
return True
此时再次登录访问,删除不了自己,可以删除其他用户。
9、编辑用户
首页index.html,添加配置:<a href="{% url 'user:view' %}?uid={{ uid }}">编辑</a>
用户编辑页面view.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户编辑</title>
</head>
<body>
<form action="{% url 'user:update' %}" method="POST">
{% csrf_token %}
{% if errors %}
{% for key, error in errors.items %}
{{ error }} <br/>
{% endfor %}
{% endif %}
<input type="hidden" name="id" value="{{ user.id }}">
用户名: <input type="text" name="name" value="{{ user.name }}"/> <br/>
联系方式: <input type="text" name="tel" value="{{ user.tel }}"/> <br/>
年龄: <input type="text" name="age" value="{{ user.age }}"/> <br/>
性别: <input type="radio" name="sex" value="1"
{% if user.sex != 0 %} checked="checked" {% endif %}/> 男
<input type="radio" name="sex" value="0"
{% if user.sex == 0 %} checked="checked"{% endif %} /> 女
<br/>
<input type="submit" value="修改" /> <br/>
</form>
</body>
</html>
路由url设置,
path('view/', views.view, name='view'),
path('update/', views.update, name='update'),
视图信息,
from .models import valid_login as valid_login_func, delete_user, get_user, valid_update_user, update_user
def view(request):
if not request.session.get('user'):
return redirect('user:login')
uid = request.GET.get('uid', '')
return render(request, 'user/view.html', {'user': get_user(uid)})
def update(request):
if not request.session.get('user'):
return redirect('user:login')
uid = request.POST.get('uid', '')
name = request.POST.get('name', '')
tel = request.POST.get('tel', '')
age = request.POST.get('age', '')
sex = request.POST.get('sex', 1)
is_valid, user, errors = valid_update_user(request.POST)
if is_valid:
update_user(user)
return redirect('user:index')
else:
return render(request, 'user/view.html',
{'user': user, 'errors': errors})
模型model设置,需要调整get_user,获取用户uid信息
def get_user(uid):
users = get_users()
user = users.get(uid, {}) #加入uid,为后面删除做铺垫。
user['id'] = uid
return user
def valid_update_user(params):
uid = params.get('id', '')
name = params.get('name', '')
tel = params.get('tel', '')
age = params.get('age', '')
sex = params.get('sex', '')
is_valid = True
user = {}
errors = {}
users = get_users()
user['id'] = params.get('id', '').strip()
if users.get(user['id']) is None:
errors['id'] = '用户信息不存在'
user['name'] = params.get('name', '').strip()
for uid , cuser in users.items():
if cuser['name'] == user['name'] and uid != user['id']:
errors['name'] = '用户名已存在'
is_valid = False
break
user['age'] = params.get('age', '0').strip()
if not user['age'].isdigit():
errors['age'] = '年龄格式错误'
is_valid = False
user['tel'] = params.get('tel', '0').strip()
user['sex'] = int(params.get('sex', '0').strip())
return is_valid, user, errors
def update_user(params):
uid = params.pop('id')
users = get_users()
users[uid].update(params)
return dump_users(users)
页面访问可以正常编辑和保存了。
备份以上代码总结:
(py36env) [root@txy 06]# tar -czf cmdb_file.tar.gz cmdb
(py36env) [root@txy 06]# pip freeze
backcall==0.2.0
decorator==5.1.1
Django==2.0.5
ipython==7.16.3
ipython-genutils==0.2.0
jedi==0.17.2
mysqlclient==2.1.1
parso==0.7.1
pexpect==4.8.0
pickleshare==0.7.5
prompt-toolkit==3.0.30
ptyprocess==0.7.0
Pygments==2.12.0
pytz==2022.1
six==1.16.0
traitlets==4.3.3
wcwidth==0.2.5
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
2021-07-25 python项目工具封装(mysql、sendmail、requests)