class User(AbstractUser):
id = models.BigAutoField(primary_key=True)
# 用户类型
# 1: 超管 | 1000: 普通管理员 | 2000:学生 | 3000: 老师
usertype = models.PositiveIntegerField()
# 真实姓名
realname = models.CharField(max_length=30, db_index=True)
# 学号
studentno = models.CharField(
max_length=10,
db_index=True,
null=True, blank=True
)
# 备注描述
desc = models.CharField(max_length=500, null=True, blank=True)
REQUIRED_FIELDS = ["usertype", "realname"] # 创建用户必须填的字段
class Meta:
db_table = "by_user"
@staticmethod
def addone(data):
try:
record = User.objects.create(realname=data['realname'],
username=data['username'],
password=make_password(data['password']),
studentno=data['studentno'],
desc=data['desc'],
usertype=data['usertype'],
)
return {'ret': 0, 'id': record.id} # 不是返回客户端的所以不需要用JR
except:
err = traceback.format_exc()
return {'ret': 2, 'msg': err}
@staticmethod
def listbypage(pagenum,pagesize,keywords):
try:
# .order_by('-id') 表示按照 id字段的值 倒序排列
# 这样可以保证最新的记录显示在最前面
qs = User.objects.values('id', # 参数表示获取的字段,如无参数则全部获取
'username',
'realname',
'studentno',
'desc',
'usertype').order_by('-id')
# 查看是否有 关键字 搜索 参数
if keywords:
conditions = [Q(realname__contains=one) for one in keywords.split(' ') if one]
query = Q()
for condition in conditions:
query &= condition
qs = qs.filter(query)
# 使用分页对象,设定每页多少条记录
pgnt = Paginator(qs, pagesize)
# 从数据库中读取数据,指定读取其中第几页
page = pgnt.page(pagenum)
# 将 QuerySet 对象 转化为 list 类型
retlist = list(page)
# total指定了 一共有多少数据
return {'ret': 0, 'items': retlist, 'total': pgnt.count, "keywords": keywords}
except EmptyPage:
return {'ret': 1, 'items': [], 'total': 0, "keywords": keywords}
except:
err = traceback.format_exc()
return {'ret': 2, 'msg': err}
View里面的代码
# 账号管理
class ACCOUNTHANDLER:
def handle(self, request):
if request.method == 'GET':
pd = request.GET
else:
pd = json.loads(request.body) # parameterdict 根据api文档将消息体中的数据解码为字典对象
request.pd = pd
action = request.pd.get('action')
if action == 'listbypage':
return self.listbypage(request)
if action == 'addone':
return self.addone(request)
def listbypage(self, request):
# 要获取的第几页
pagenum = int(request.pd.get('pagenum')) # 用整数比较好 不用也行
# 每页要显示多少条记录
pagesize = int(request.pd.get('pagesize'))
# 关键字
keywords = request.pd.get("keywords")
ret = User.listbypage(pagenum, pagesize, keywords)
return JR(ret)
def addone(self, request):
data = request.pd.get('data')
ret = User.addone(data)
return JR(ret)
有报错吗?数据库中数据表里有数据吗?
你的JR继承了django的JsonResponse?既然报错view返回的不是http响应,问题出在jr上啊,打印一下看看,测试一下
有人帮帮我吗 代码看起来也没问题 到底哪里出错了