django将表数据通过API展示到页面上-创新互联
需求:
成都创新互联公司主要从事成都做网站、成都网站制作、网页设计、企业做网站、公司建网站等业务。立足成都服务郫都,十多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575我在learn这个app下创建了两张表,其中一个表为user,我希望通过API,在页面是展示这些数据,当用户访问指定的url时,将表中所有对象展示到页面上。
先看learn/models.py文件代码
#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 i 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 i in self.group.all()])
表中的数据如下
我希望访问一个url获取到user表中的数据,像这样:
这种需求非常常见,比如公司有CMDB,我可以通过API去获取某个表里面的数据,然后去添加监控什么的。
下面是具体的操作方法:
1、新建一个名为api的APP,并加入到settings.py文件中的INSTALLED_APPS中
django-admin startapp api
2、在api这个app下,创建urls.py文件,并在mysite/usrls.py文件中include app/urls.py文件
3、编辑api/views.py文件。创建一个函数,用来响应来自urls.py中定义的url的请求
#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): p = request.GET.get('Email') q = 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 i in user.group.all()]) }) return JsonResponse(user_list,safe=False)
获取表中所有对象,
users = User.objects.all()
注意:由于User表中有多个对象,所以用User.objects.all()获取到的是一个对象的集合,即列表。
这个集合是可以迭代的,可以用以下代码,在按照自己的需求,展示数据
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 i in user.group.all()]) }) return JsonResponse(user_list,safe=False)
4、编辑api/urls.py文件,
#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表中的数据
6、获取指定的用户的信息
上面的api展示的user表中所有的对象,我们可以查询指定的对象,并展示
#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): p = request.GET.get('Email') q = 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 i in user.group.all()]) }) return JsonResponse(user_list,safe=False)
p = request.GET.get('Email') q = request.GET.get('group')
获取客户端浏览器中url地址里面Email和group对应的值。
if p: users = User.objects.filter(Email=p) if q: users = User.objects.filter(group__Name__icontains=q)
然后通过filter方法进行过滤。
user = User.objects.filter(Email="abc@qq.com")
获取Email为abc@qq.com的对象。
如果是多对多关系的属性,需要这样写
users = User.objects.filter(group__Name__icontains=q)
group__Name(中间是双下划线)表示user表中group字段的属性链接到对应的Group表中的Name字段上。
如果想模糊查询,可以使用icontains方法。Name后面是双下划线"_"
group__Name__icontains
7、查询邮箱为“a@qq.com”的对象
8、查询所属组的组名中带有“CO”的
9、组合查询
查询所属组为COO,邮箱为a@qq.com的对象
补充:
1、 QuerySet 查询结果排序
User.objects.all().order_by('Name') User.objects.all().order_by('-Name') ##在字段名前面加“-”,表示实现倒叙
这里我修改了表中用户的姓名,如图
修改api/views.py代码
再次访问api
2、排除符合条件的对象
User.objects.all().order_by('Name').exclude(Name='www')
找出所有对象,但排除Name为‘www’的对象
访问api
修改api/views.py后再次访问,发现www这个用户在页面上不显示了
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
文章名称:django将表数据通过API展示到页面上-创新互联
文章地址:http://hbruida.cn/article/dhhphh.html