Django后端处理数据与Vue通信及相关知识
登录界面后端设计
class LoginView(View):
def post(self, request):
username = request.GET.get("username")
password = request.GET.get("password")
try:
user = SysUser.objects.get(username=username, password=password)
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
# 将用户对象传递进去,获取到该对象的属性值
payload = jwt_payload_handler(user)
# 将属性值编码成jwt格式的字符串
token = jwt_encode_handler(payload)
roleList = SysRole.objects.raw(
"SELECT id,name FROM sys_role WHERE id IN (SELECT role_id FROM sys_user_role WHERE user_id="
+ str(user.id) + ")")
roles = ",".join([role.name for role in roleList])
menuSet: set[SysMenu] = set() # 转换为合集数据类型,内容不会重复
for item in roleList:
menuList = SysMenu.objects.raw(
"SELECT * FROM sys_menu WHERE id IN (SELECT menu_id FROM sys_role_menu WHERE role_id="
+ str(item.id) + ")")
for row in menuList:
# print(row.id, row.name)
menuSet.add(row)
menuList: list[SysMenu] = list(menuSet) # set转换为list
sorted_menuList = sorted(menuList) # 根据order_num排序
# print(sorted_menuList)
except Exception as e:
print(e)
return JsonResponse({'code': 500, 'info': '用户名或密码错误'})
return JsonResponse({'code': 200, 'user': user_data, 'token': token, 'info': '登陆成功',
"menuList": serializerMenuList})
class SaveView(View):
def post(self, request):
data = json.loads(request.body.decode("utf-8")) # 从前端获取信息并进行处理
# print(data)
if data['id'] == -1: # 添加
pass
else: # 修改
obj_sysUser = SysUser(id=data['id'], username=data['username'],
password=data['password'],
avatar=data['avatar'], email=data['email'],
phonenumber=data['phonenumber'],
login_date=data['login_date'],
status=data['status'], create_time=data['create_time'],
update_time=data['update_time'],
remark=data['remark'])
obj_sysUser.update_time = datetime.now().date()
obj_sysUser.save()
return JsonResponse({'code': 200})
登录token设计:引入JWT前后端交互,Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC7519);
JWT就是一段字符串,用来进行用户身份认证的凭证,该字符串分成三段【头部、载荷、签证】。这个字符串就是用户的访问令牌(token),用户可以在后续的请求中使用这个令
牌来访问受保护的资源。
python中try语句:
try:
# 尝试执行的代码块
x = 1 / 0 # 这将引发一个ZeroDivisionError异常
except ZeroDivisionError:
# 当检测到ZeroDivisionError异常时执行的代码
print("不能除以零!")
except Exception as e: # 捕获所有其他异常类型
# 当其他异常发生时执行的代码
print(f"发生了一个错误:{e}")
else:
# 如果没有异常发生,执行的代码
print("操作成功完成。")
finally:
# 无论是否发生异常,都会执行的代码
print("此代码块将始终执行。")

浙公网安备 33010602011771号