django_project_demo/app/views/task.py

97 lines
2.7 KiB
Python
Raw Normal View History

2024-08-24 11:25:23 +08:00
"""
对ajax的测试前端数据是从task_list.html中提交过来的
主要用到
1.django的csrf认证post请求时)
2.数据返回时使用的是json格式
3.数据接收request.POST,或request.GET
重点是返回给前端的数据是json格式
"""
import json
from django import forms
from django.shortcuts import render, HttpResponse, redirect
# 免除crsf认证如果ajax请求时不是表单提交所以会很复杂导入他就行
from django.views.decorators.csrf import csrf_exempt
from app.models import Task
from app.utils.bootstrap import BootstrapModelForm
from app import models
from app.utils.pagination import Pagination
class TaskModelForm(BootstrapModelForm):
class Meta:
model = models.Task
fields = '__all__' # 所有字段
# 单独针对详细信息进行控件控制
widgets = {
'detail': forms.TextInput,
# 'detail': forms.Textarea,
}
""" 任务管理 """
def task_list(request):
# 猎取全部记录
queryset = models.Task.objects.all().order_by('-id')
page_object = Pagination(request, queryset) # 实例化分页导航条类
page_queryset = page_object.page_queryset # 获得分完页的数据结果
# 生成分页导航条
page_nav = page_object.html()
form = TaskModelForm()
content = {
'form':form,
'queryset': page_queryset, # 分完页的数据结果
'page_nav': page_nav # 生成的页码导航条
}
return render(request, 'task_list.html', content)
@csrf_exempt
def task_ajax(request):
# <QueryDict: {'level': ['3'], 'title': ['asdfasdf'], 'detail': ['adfadf'], 'user': ['2']}>
print(request.GET)
print(request.POST) # 接收到的数据
print(request.POST['n1'])
# 一般来讲ajax返回的是一个JSON格式的数据
data_dict = {"status": True, "data": [11, 22, 33]}
data_json = json.dumps(data_dict)
return HttpResponse(data_json)
@csrf_exempt
def task_add(request):
# print(request.POST)
# 对ajax提交近来的数据进行校验
form = TaskModelForm(data=request.POST)
if form.is_valid():
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编码格式
@csrf_exempt
def task_edit(request):
pass
@csrf_exempt
def task_delete(request, nid):
"""
删除任务
"""
Task.objects.filter(id=nid).delete()
return redirect('/task/list/')