django 将表数据通过API展示到页面上

简介:

需求:

我在learn这个app下创建了两张表,其中一个表为user,我希望通过API,在页面是展示这些数据,当用户访问指定的url时,将表中所有对象展示到页面上。

先看learn/models.py文件代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#coding:utf8
from  django.db  import  models
class  Group(models.Model):
     Name  =  models.CharField(max_length = 20 )
     def  user_list( self ):
         return  ',' .join([i.Name  for  in  self .user_set. all ()])
     def  __unicode__( self ):
         return  self .Name
 
class  User(models.Model):
     Name  =  models.CharField(max_length = 20 )
     Email  =  models.CharField(max_length = 50 )
     group  =  models.ManyToManyField(Group,blank = True )
     def  __unicode__( self ):
         return  self .Name
     def  group_list( self ):
         return  ',' .join([i.Name  for  in  self .group. all ()])


表中的数据如下

wKioL1i4-rHiIVSiAAEERSN7H64451.png


我希望访问一个url获取到user表中的数据,像这样:

wKiom1i4-ziilixjAACMapeuEss147.png

这种需求非常常见,比如公司有CMDB,我可以通过API去获取某个表里面的数据,然后去添加监控什么的。


下面是具体的操作方法:

1、新建一个名为api的APP,并加入到settings.py文件中的INSTALLED_APPS中

1
django-admin startapp api

wKiom1i4_R2x717zAAXKtJG9GD4190.png-wh_50



2、在api这个app下,创建urls.py文件,并在mysite/usrls.py文件中include app/urls.py文件

wKioL1i4_b7wYJBJAAKEHcJnMLU423.png



3、编辑api/views.py文件。创建一个函数,用来响应来自urls.py中定义的url的请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#coding:utf8
from  django.http  import  HttpResponse,JsonResponse
from  django.shortcuts  import  render
from  learn.models  import  *   ##别忘了从learn/models.py文件中导入User对象
# Create your views here.
def  get_user(request):
     =  request.GET.get( 'Email' )
     =  request.GET.get( 'group' )
     user_list  =  []
     users  =  User.objects. all ()
     if  p:
         users  =  User.objects. filter (Email = p)
     if  q:
         users  =  User.objects. filter (group__Name__icontains = q)
     for  user  in  users:
         user_list.append({
             u '姓名' : user.Name,
             u '邮箱' : user.Email,
             u '所属组' ',' .join([i.Name  for  in  user.group. all ()])
         })
     return  JsonResponse(user_list,safe = False )

获取表中所有对象

1
users  =  User.objects. all ()

注意:由于User表中有多个对象,所以用User.objects.all()获取到的是一个对象的集合,即列表。

这个集合是可以迭代的,可以用以下代码,在按照自己的需求,展示数据

1
2
3
4
5
6
7
8
9
10
def  get_user(request):
for  user  in  users:
     user_list  =  []
     users  =  User.objects. all ()
     user_list.append({
         u '姓名' : user.Name,
         u '邮箱' : user.Email,
         u '所属组' ',' .join([i.Name  for  in  user.group. all ()])
         })
     return  JsonResponse(user_list,safe = False )


4、编辑api/urls.py文件,

1
2
3
4
5
6
7
#coding:utf8
from  django.conf.urls  import  url
from  django.contrib  import  admin
from  api.views  import  *
urlpatterns  =  [
     url(r '^get_user/' , get_user),
]


5、访问api,获取user表中的数据

wKiom1i4-ziilixjAACMapeuEss147.png



6、获取指定的用户的信息

上面的api展示的user表中所有的对象,我们可以查询指定的对象,并展示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#coding:utf8
from  django.http  import  HttpResponse,JsonResponse
from  django.shortcuts  import  render
from  learn.models  import  *   ##别忘了从learn/models.py文件中导入User对象
# Create your views here.
def  get_user(request):
     =  request.GET.get( 'Email' )
     =  request.GET.get( 'group' )
     user_list  =  []
     users  =  User.objects. all ()
     if  p:
         users  =  users.objects. filter (Email = p)
     if  q:
         users  =  users.objects. filter (group__Name__icontains = q)
     for  user  in  users:
         user_list.append({
             u '姓名' : user.Name,
             u '邮箱' : user.Email,
             u '所属组' ',' .join([i.Name  for  in  user.group. all ()])
         })
     return  JsonResponse(user_list,safe = False )
1
2
=  request.GET.get( 'Email' )
=  request.GET.get( 'group' )

获取客户端浏览器中url地址里面Email和group对应的值。

1
2
3
4
if  p:
     users  =  User.objects. filter (Email = p)
if  q:
     users  =  User.objects. filter (group__Name__icontains = q)

然后通过filter方法进行过滤。

1
user  =  User.objects. filter (Email = "abc@qq.com" )

获取Email为abc@qq.com的对象。

如果是多对多关系的属性,需要这样写

1
users  =  User.objects. filter (group__Name__icontains = q)

group__Name(中间是双下划线)表示user表中group字段的属性链接到对应的Group表中的Name字段上。


如果想模糊查询,可以使用icontains方法。Name后面是双下划线"_"

1
group__Name__icontains


7、查询邮箱为“a@qq.com”的对象

wKiom1i5BoXCOPL9AABu0zR72yI042.png

8、查询所属组的组名中带有“CO”的

wKiom1i5Bwai2BQDAACJ6hDu8gM638.png


9、组合查询

查询所属组为COO,邮箱为a@qq.com的对象

wKiom1i5C-vyKfq_AABymzyC_6U413.png-wh_50



补充:

1、 QuerySet 查询结果排序

1
2
User.objects. all ().order_by( 'Name' )
User.objects. all ().order_by( '-Name' ##在字段名前面加“-”,表示实现倒叙

这里我修改了表中用户的姓名,如图

wKiom1i5EOPj7WVnAADKMF7Oa34131.png-wh_50


修改api/views.py代码

wKiom1i5ERPizS0GAAP5WE0i9ZY907.png-wh_50


再次访问api

wKioL1i5EUei_qR8AADCfXKMcqc816.png-wh_50



2、排除符合条件的对象

1
User.objects. all ().order_by( 'Name' ).exclude(Name = 'www' )

找出所有对象,但排除Name为‘www’的对象

wKiom1i5Fy6RYuNyAAEDecvcDGs211.png

访问api

wKioL1i5F3-waunEAADVtxP3mkI806.png-wh_50

修改api/views.py后再次访问,发现www这个用户在页面上不显示了

wKioL1i5GEKwOsL5AAQwgrbqdvw063.png-wh_50

wKiom1i5GEKCXFzXAACrXd232tY654.png-wh_50










本文转自 曾哥最爱 51CTO博客,原文链接:http://blog.51cto.com/zengestudy/1902980,如需转载请自行联系原作者

目录
相关文章
|
2月前
|
API 数据库 数据安全/隐私保护
利用Django框架构建高效后端API服务
本文将介绍如何利用Django框架构建高效的后端API服务。通过深入分析Django框架的特性和优势,结合实际案例,探讨了如何利用Django提供的强大功能来构建高性能、可扩展的后端服务。同时,还对Django框架在后端开发中的一些常见问题进行了解决方案的探讨,并提出了一些建设性的建议。
68 3
|
24天前
|
XML JSON API
快速淘宝商品详情页面API接口传输 php
PI(Application Programming Interface,应用程序接口)是一组预定义的函数、协议和工具,用于构建软件应用程序之间的交互。它允许不同的软件系统和应用通过统一的接口进行数据交换和通信
|
1月前
|
前端开发 API 数据库
Django(五):如何在Django中通过API提供数据库数据给前端
Django(五):如何在Django中通过API提供数据库数据给前端
|
3月前
|
Web App开发 存储 移动开发
Page Visibility API(页面是否可见)
Page Visibility API(页面是否可见)
15 0
|
3月前
|
小程序 API
小程序中用于跳转页面的5个api是什么?区别?
小程序中用于跳转页面的5个api是什么?区别?
|
7月前
|
编解码 前端开发 API
Spartacus 产品明细页面的 API 设计
Spartacus 产品明细页面的 API 设计
52 0
|
5月前
|
移动开发 小程序 JavaScript
【uniapp 小程序开发页面篇】代码编写规范 | 页面编写规范 | 小程序API
【uniapp 小程序开发页面篇】代码编写规范 | 页面编写规范 | 小程序API
143 0
|
5月前
|
算法 关系型数据库 API
Python【算法中心 02】Web框架Django管理页面使用(管理员账号创建+API使用+应用添加)GreenPlum数据库引擎及API测试
Python【算法中心 02】Web框架Django管理页面使用(管理员账号创建+API使用+应用添加)GreenPlum数据库引擎及API测试
45 0
|
5月前
|
关系型数据库 MySQL 数据库
Django实践-03模型-01表生成模型+学科页面与教师页面编写
Django实践-03模型-01表生成模型+学科页面与教师页面编写
Django实践-03模型-01表生成模型+学科页面与教师页面编写
|
7月前
|
存储 JavaScript 前端开发
详解js跨页面传参以及API的解释
详解js跨页面传参以及API的解释
112 0