django_project_demo/app/views/order.py

124 lines
4.4 KiB
Python
Raw Normal View History

2024-08-24 11:25:23 +08:00
"""
订单管理
主要以模态窗口方式实现添加操作
"""
import json
import random
from datetime import datetime
from django.shortcuts import render, HttpResponse, redirect
from app import models
from app.models import Order
from app.utils.form import OrderModelForm
# 免除crsf认证如果ajax请求时不是表单提交所以会很复杂导入他就行
from django.views.decorators.csrf import csrf_exempt
from app.utils.pagination import Pagination
def order_list(request):
""" 订单列表 """
# 猎取全部记录
queryset = models.Order.objects.all().order_by('-id')
page_object = Pagination(request, queryset) # 实例化分页导航条类
page_queryset = page_object.page_queryset # 获得分完页的数据结果
# 生成分页导航条
page_nav = page_object.html()
form = OrderModelForm()
content = {
'form': form,
'queryset': page_queryset, # 分完页的数据结果
'page_nav': page_nav # 生成的页码导航条
}
return render(request, 'order_list.html', content)
@csrf_exempt
def order_add(request):
"""新建订单"""
# 对ajax提交近来的数据进行校验
form = OrderModelForm(data=request.POST)
print(form)
if form.is_valid():
form.instance.oid = datetime.now().strftime('%Y%m%d%H%M%S') + str(random.randint(1000, 9999))
# 在models.py中定义的是user是有主键约束的所以django在生成数据表结构时会自动加一个_id
form.instance.user_id = request.session['info']['id']
form.save() # 向数据表添加数据
# 将标记传回前端
data_dict = {"status": True, }
return HttpResponse(json.dumps(data_dict))
# 如果有错误
# 将生成错误以json格式返回给前端
data_dict = {"status": False, 'error_msg': form.errors}
return HttpResponse(json.dumps(data_dict, ensure_ascii=False)) # ensure_ascii编码格式
def order_delete(request):
"""删除订单"""
# nid = request.GET['data']
Order.objects.filter(id=request.GET.get('nid')).delete()
finish = {"status": True, }
return HttpResponse(json.dumps(finish))
def order_detail(request):
""" 获取订单的全部信息,返回给前端显示,用于修改使用 """
""" 方式1 返回的是一个对象取数据结果时较复杂"""
# uid = request.GET.get('nid')
# print(uid)
# row_object = models.Order.objects.filter(id=uid).first()
# if not row_object: # 数据不存在
# return HttpResponse(json.dumps({'status': False, 'error': '数据不存在!'}))
# print(row_object)
# # row_object本返回的是一个对象不能够直接JSON所以手对构建字典
# result_dict = {
# 'status': True,
# 'data': {
# 'title': row_object.title,
# 'price': row_object.price,
# 'status': row_object.status,
# },
# }
# return HttpResponse(json.dumps(result_dict))
""" 方式2 """
uid = request.GET.get('nid')
print(uid)
row_dict = models.Order.objects.filter(id=uid).values('title', 'price', 'status').first()
if not row_dict: # 数据不存在
return HttpResponse(json.dumps({'status': False, 'error': '数据不存在!'}))
# row_dict 返回的是一个字典
result_dict = {
'status': True,
'data': row_dict
}
return HttpResponse(json.dumps(result_dict))
@csrf_exempt
def order_edit(request):
uid = request.GET.get('uid')
# 1.先查询到该条记录
# 2.拿到POST请求过来的数据data=request.POST将将查询到数据对象传递给forminstance=row_data
row_data = Order.objects.filter(id=uid).first()
if not row_data:
data_dict = {"status": False, "tips": '数据不存在,请刷新后重试'}
return HttpResponse(json.dumps(data_dict, ensure_ascii=False)) # ensure_ascii编码格式
# POST请求
form = OrderModelForm(data=request.POST, instance=row_data) # 拿到所有提交过来的数据
if form.is_valid(): # 数据校验
form.save() # 向 model = UserInfo 定义的表保存数据
# 将标记传回前端
data_dict = {"status": True, }
return HttpResponse(json.dumps(data_dict))
# 如果有错误
# 将生成错误以json格式返回给前端
data_dict = {"status": False, 'error_msg': form.errors}
return HttpResponse(json.dumps(data_dict, ensure_ascii=False)) # ensure_ascii编码格式