一 : 科普一分钟
Ajax
不是一种新的编程语言,而是一种用于创建更好更快以及交互性更强的Web应用程序的技术,用于web端的异步请求.
对于多表的ORM
该如何创建,删除,关联它们之间的关系,Django
为我们提供了很多方法,让我们来揭开神秘的面纱吧.
二 : ORM获取对象模式
- 内部元素是对象
stu
是一个 对像列表[obj1,obj2]
stu = models.Student.objects.all()
- 内部元素都是字典
stu
是一个字典列表 [ {'name':'tz','age':'26'} ]
stu = models.Student.objects.all().values('name','age')
- 内部元素都是元组
stu
是一个元祖列表 [(雪芙,24),(容姿,23)]
stu = models.Business.Student.all().values_list('name','age')
三 : Ajax
Asynchronous Javascript And XML
- > 异步 JavaScript 和 XML
通常用于web端与服务端的交互,可以直接在前台页面 JavaScript 调用后台页面的方法.
我们对某个标签进行绑定,然后进行Ajax
请求, 可以看代码感觉一下 很像移动端安卓的Volley
或者iOS的AFN
网络请求框架.拿到后台返回的数据进行页面操作.
- 页面进行JS操作
$('#TZajax').click(function(){
$.ajax({
url: "/myajax",
type: 'POST',
//data: {'hostname': $('#host').val(), 'ip': $('#ip').val(), 'port': $('#port').val(), 'b_id': $('#sel').val()},
#可以直接拿到表单对应的数据进行请求
data: $('#add_form').serialize(),
success: function(data){
#解码成json格式
var obj = JSON.parse(data);
if(obj.status){
#True 重新刷新页面
location.reload();
}else{
#弹出错误信息
$('#erro_msg').text(obj.error);
}
}
})
});
- 服务端进行处理操作
def myajax(request):
ret = {'status': True, 'error': None, 'data': 'hahaha'}
try:
h = request.POST.get('hostname')
i = request.POST.get('ip')
p = request.POST.get('port')
b = request.POST.get('b_id')
if h and len(h) > 5:
models.Host.objects.create(hostname=h,
ip=i,
port=p,
b_id=b)
else:
ret['status'] = False
ret['error'] = "请求参数错误"
except Exception as e:
ret['status'] = False
ret['error'] = '请求错误'
return HttpResponse(json.dumps(ret))
四 : 多对多表操作
在A 表中的一行可以匹配 B 表中的多行,反之亦然。要创建这种关系,需要定义第三个表,称为[结合表],它的主键由 A 表和 B 表的外部键组成。例如,authors
和 titles
表具有多对多关系,这是由于这些表都与 titleauthors
表具有一对多关系。titleauthors
表的主键是 au_id
列(authors
表的主键)和 title_id
列(titles
表的主键)的组合。
-
关系图
image
-
自定义关系表
#表一
class Student(models.Model):
nid = models.AutoField(primary_key=True)
studentname = models.CharField(max_length=32,db_index=True)
#表二
class Course(models.Model):
name = models.CharField(max_length=32)
#关系表
class StudentAndCourse(models.Model):
hobj = models.ForeignKey(to='Student',to_field='nid')
aobj = models.ForeignKey(to='Course',to_field='id')
- 自动创建关系表
方式二:自动创建关系表
#表一
class Student(models.Model):
nid = models.AutoField(primary_key=True)
studentname = models.CharField(max_length=32,db_index=True)
#表二
class Course(models.Model):
name = models.CharField(max_length=32)
r = models.ManyToManyField("Student")
#########
无法直接对第三张表进行操作,通过r 对关系表进行操作
obj = Course.objects.get(id=1)
obj.name
# 第三张表操作 对id为1 的添加学生关系
obj.r.add(1)
obj.r.add(2)
obj.r.add(2,3,4)
#添加一组列表
obj.r.add(*[1,2,3,4])
#移除关系
obj.r.remove(1)
obj.r.remove(2,4)
#移除一组关系
obj.r.remove(*[1,2,3])
#清除所有关系
obj.r.clear()
#重置关系
obj.r.set([3,5,7])
# 获取所有相关的对象“列表” QuerySet
obj.r.all()
五 : 总结
我们可以给Ajax
返回json
接口, 应用于web端,也就是说,对于移动端,我们也可以用同样的方法写一个后台接口,让移动端调用,并且返回相应的数据.有移动端基础的同学,也可以尝试一下自己做一个接口,并且测试一下返回数据,多多尝试,下期再见.
网友评论